美文网首页
javascript拷贝

javascript拷贝

作者: 寿_司 | 来源:发表于2015-05-29 02:08 被阅读0次

基本类型:深浅拷贝都是一样的效果,所以只有拷贝,值传递,新的内存分配,和原来的没有关系,只是值一样罢了。
引用类型:浅拷贝只是地址的传递,相当于“指针”,指向内存中的一个相同的对象地址。深拷贝是完全复制了一个新的对象,和原来的没有关系,只是内容相同而已。

  • 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"

相关文章

网友评论

      本文标题:javascript拷贝

      本文链接:https://www.haomeiwen.com/subject/hmbrqttx.html