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,应该怎么做?
展开
 我来答
网海1书生
科技发烧友

2018-05-25 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

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

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式