js对象数组赋值的灵异事件

写js时,碰到一个奇怪的bug。将变量foo的值赋给变量bar后,改变bar也会改变foo。

简单研究过后,这种情况只是在改变object和array时发生。

var foo = {key: 'foo'}
var bar = foo   // bar => {key: 'foo'}
bar.key = 'bar'  // 改变bar这个对象
bar  // => {key: 'bar'} 
foo  // => {key: 'bar'} foo竟然也被改变了

// go on
bar = 'change it to a string'
bar  // => 'change it to a string'
foo // {key: 'bar'} 这回foo不变
结论:

js中不同变量存储的object并没有在内存中存储多份,而只将变量名(foo,bar)当成是对该对象的引用。array也能看成object,所以同样遵循这个规则。

你可能感兴趣的:(js对象数组赋值的灵异事件)