• 首页
  • ASPCMS
  • DEDECMS
  • DuxCms
  • 工具下载
  • SEO知识
  • WEB前端开发
  • 当前位置:首页 > WEB前端开发 >
  • WEB前端开发
  • JS中object与array的引用类型

  • 已有 人阅读此文  -  2019.01.23  -  WEB前端开发  -  萤火星

今天项目中遇到了很头疼的问题,一点点摸索得到的结论如下:

运行环境1:var [变量名] = ojbect 是引用类型


var a = {a:1,b:2}

var b = a;

这时候 b 和 a object中的元素操作是同步的,即:

b.c = 3;

则

a 这时候是{a:1,b:2,c:3}





运行环境2:var [变量名] = array 是引用类型


var a = [1,2,3,4]

var b = a;

b.push(5);

则

a= [1,2,3,4,5]




运行环境3:


拷贝对象或者数组,即复制一份非引用类型的数据;


对象可以用:object.assign(新object,被复制的object)

数组可以用:arr.concat();


例如:

var a = {a:1,b:2};

var b = Object.assign({},a);

b.c = 3;

这时候:

a 还是{1,2}

_ _ _ _ _ _


var a = [1,2,3,4];

var b = a.concat();

b.push(5);

这时候:

a 还是[1,2,3,4]





深坑慎入:


var a = {a:1,b:2};

var b = {c:3,d:4};

var arr1 = [a,b];

var arr2 = arr1.concat();

arr2[0].c = 5;



arr1???????????????????????


==============================

===============================


解决方案:

var a = {a:1,b:2};

var b = {c:3,d:4};

var arr1 = [a,b];

var arr2 = [];

for(var i in arr1){

arr2.push(Object.assign({},arr1[0]));

}



测试:

arr1[0].c = 5;



结论:

这时候估计数组中存储的每个元素都是一个引用类型吧。



如果本篇文章帮到了你,那么,请点击右侧的百度分享,让我们一起帮助更多的朋友!
  • 上一篇:【腾讯云】云服务器1核2G、1M带宽买三送一,不到10元一月,附详
  • 下一篇:没有了
前端交流群
热门文章
  • 1php文件|文件夹操作
  • 2PHP中获取当前页面的完整URL
  • 3Frameset使用教程
  • 4Frameset刷新问题
  • 5使用js验证中国第二代身份证
推荐阅读
  • php文件|文件夹操作
  • CSS3 Transition
ASPCMS | DEDECMS | DuxCms | 工具下载 | SEO知识 | WEB前端开发 | 百度地图
萤火星的经验分享!友情赞助!
鲁ICP备15006695号