美文网首页收藏
引用类型的数据'='号赋值和循环赋值的区别

引用类型的数据'='号赋值和循环赋值的区别

作者: 扶得一人醉如苏沐晨 | 来源:发表于2022-11-14 09:27 被阅读0次

直接等号赋值相当于添加了一个指针指向该内存
当你修改赋值后的数据,原来的数据也会发生改变(),如下

let obj = {name:"1",age:"10"}
let obj2 = obj
obj2.name = '2'
console.log(obj)
打印结果: {name: '2', age: '10'}

当你循环赋值的时候,开辟一个新的堆内存,两个内存不会有关联(深拷贝)

let obj = {name:"1",age:"10"}
let obj2 = {}
for(let key in obj){
  obj2[key] = obj[key]
}
obj2.age = 1000
console.log(obj)
console.log(obj2)
VM1358:7 {name: '1', age: '10'}
VM1358:8 {name: '1', age: 1000}

最后贴一段深拷贝的代码

/**
 * 对象深拷贝
 */
export const deepClone = (data) => {
  var type = getObjType(data);
  var obj;
  if (type === "array") {
    obj = [];
  } else if (type === "object") {
    obj = {};
  } else {
    // 不再具有下一层次
    return data;
  }
  if (type === "array") {
    for (var i = 0, len = data.length; i < len; i++) {
      obj.push(deepClone(data[i]));
    }
  } else if (type === "object") {
    for (var key in data) {
      obj[key] = deepClone(data[key]);
    }
  }
  return obj;
};

获取对象类型getObjType

export const getObjType = (obj) => {
  var toString = Object.prototype.toString;
  var map = {
    "[object Boolean]": "boolean",
    "[object Number]": "number",
    "[object String]": "string",
    "[object Function]": "function",
    "[object Array]": "array",
    "[object Date]": "date",
    "[object RegExp]": "regExp",
    "[object Undefined]": "undefined",
    "[object Null]": "null",
    "[object Object]": "object",
  };
  if (obj instanceof Element) {
    return "element";
  }
  return map[toString.call(obj)];
};

相关文章

  • 引用类型的数据'='号赋值和循环赋值的区别

    直接等号赋值相当于添加了一个指针指向该内存当你修改赋值后的数据,原来的数据也会发生改变(),如下 当你循环赋值的时...

  • 面向对象第二天

    值类型与引用类型 值类型:赋值是复制数据内容。 引用类型:赋值的是存储地址。 原型: 函数原型里包含prototy...

  • iOS面试题

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • 一些概念的理解

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • 答卓同学的iOS面试题

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • swift小问题

    1、struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值时...

  • iOS开发NSString的常用方法总结

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • 值类型和引用类型的特征

    值类型和引用类型的赋值 值类型赋值,直接将值复制一份 上面两句代码,在内存中的体现为: 引用类型赋值,是将地址复制...

  • iOS 面试题一

    1.strut和class的区别? swift中,class是引用类型,struct是值类型。值类型在传递和赋值时...

  • 《Java编程思想》读后总结(二)

    Java里的数据类型 Java里的对象是引用,就像C的指针。对引用的赋值实际就是对指针的赋值,对象本身并没有被赋值...

网友评论

    本文标题:引用类型的数据'='号赋值和循环赋值的区别

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