- JavaScript引用类型
- 浅拷贝和深拷贝
基本类型:深浅拷贝都是一样的效果,所以只有拷贝,值传递,新的内存分配,和原来的没有关系,只是值一样罢了。
引用类型:浅拷贝只是地址的传递,相当于“指针”,指向内存中的一个相同的对象地址。深拷贝是完全复制了一个新的对象,和原来的没有关系,只是内容相同而已。
- typeof判断数据类型,但输出的结果是string类型的值。
typeof obj === ("number" || "string" || "boolean")
等同于typeof obj === "number"
,其中涉及到了||
的短路原理,所以("number" || "string" || "boolean")
相当于("number")
。 - 字符转换,核心:
其他类型会自动转换为布尔值
。
function cloneObject(src) {
var result = {};
for (var i in src) {
var type = typeof src[i];
if (type === 'number' || type === 'string' || type === 'boolean') {
result[i] = src[i];
} else {
result[i] = cloneObject(src[i]);
}
}
return result;
}
// 测试用例:
var srcObj = {
a: 1,
b: {
b1: ["hello", "hi"],
b2: "JavaScript"
}
};
var abObj = srcObj; // 浅度克隆
var tarObj = cloneObject(srcObj);// 深度克隆
srcObj.a = 2;
srcObj.b.b1[0] = "hi";
console.log(abObj.a);// 2
//对象的拷贝,里面没有涉及到基本类型值的拷贝!!!
console.log(abObj.b.b1[0]);// "hi"
console.log(tarObj.a); // 1
console.log(tarObj.b.b1[0]); // "hello"