永发信息网

JavaScript 数组,var arr1=arr2,操作arr1后,为什么arr2也会变?

答案:1  悬赏:20  手机版
解决时间 2021-03-24 08:43
  • 提问者网友:缘字诀
  • 2021-03-23 15:11
JavaScript 数组,var arr1=arr2,操作arr1后,为什么arr2也会变?
最佳答案
  • 五星知识达人网友:归鹤鸣
  • 2021-03-23 16:29
把一个对象赋值给另一个对象(数组也是对象),实际上并不是新建一个和原对象完全一样的对象,而是把原对象的内存地址直接复制给另一个对象,也就是说两个对象都是指向同一个内存地址,实际上就是同一个对象,就像把同一个房子的钥匙复制两把,小偷用a钥匙进去把东西洗劫一空,你用b钥匙进去不可能东西原封不动吧?
所以,要想在数组a的基础上新建一个数组b,不能想当然地用b=a,而应该先新建一个空数组b,再把a的每个元素逐个复制到b中!追问最简单的方法就是这样咯:var b = [].concat(a)
js语言这样设计对象有什么意义,其它语言也是这样吗?太容易误解了追答对象内部涉及各种复杂的结构和继承关系比如属性、方法、事件等等,如果允许通过简单的赋值操作就完全克隆一个对象,那么在实际编程的时候极容易造成资源浪费甚至系统崩溃,所以多数语言(至少我所知的都如此)都是不允许这样做的,一般都是通过new一个对象原型来产生一个新的实例(比如产生一个新数组就是 var b = new Array(),可以简写为 var b = [])
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯