JavaScript 数组,var arr1=arr2,操作arr1后,为什么arr2也会变?
vara=[1,2,3,4,5];varb=ab.push(6)console.log(a,b)结果为:[1,2,3,4,5,6][1,2,3,4,5,6]操作b后,为什...
var a = [1,2,3,4,5];var b = ab.push(6)console.log(a,b)结果为:[1,2,3,4,5,6][1,2,3,4,5,6]操作b后,为什么a也要跟着变?这样设计的意义在哪?
如果我只想操作b,应该怎么做? 展开
如果我只想操作b,应该怎么做? 展开
展开全部
把一个对象赋值给另一个对象(数组也是对象),实际上并不是新建一个和原对象完全一样的对象,而是把原对象的内存地址直接复制给另一个对象,也就是说两个对象都是指向同一个内存地址,实际上就是衡轮含同一个对象,就像把同一个房子的钥匙复制两把,小偷用a钥匙进去把东西洗劫一空,你用b钥匙进去不可能东西原封不动吧?
所以,要想在数桐宏组a的基础上新建一个数组b,不能想当然地用b=a,而应该先新建一个空数咐笑组b,再把a的每个元素逐个复制到b中!
所以,要想在数桐宏组a的基础上新建一个数组b,不能想当然地用b=a,而应该先新建一个空数咐笑组b,再把a的每个元素逐个复制到b中!
追问
最简单的方法就是这样咯:var b = [].concat(a)
js语言这样设计对象有什么意义,其它语言也是这样吗?太容易误解了
追答
对象内部涉及各种复杂的结构和继承关系比如属性、方法、事件等等,如果允许通过简单的赋值操作就完全克隆一个对象,那么在实际编程的时候极容易造成资源浪费甚至系统崩溃,所以多数语言(至少我所知的都如此)都是不允许这样做的,一般都是通过new一个对象原型来产生一个新的实例(比如产生一个新数组就是 var b = new Array(),可以简写为 var b = [])
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询