我不确定如何解释这个问题,所以我会用代码来说明。
var bob = {
"1": ["a", "b"]
}
var jim = bob[1]
jim.shift()
print(bob[1])
使用d8运行它,我得到[b]
的输出。
注意当我修改bob
时,jim
(我从jim引用的对象)的更改方式。我希望有一种行为,即修改jim
对bob
没有任何作用。也就是说,即使在shift()
之后,我仍然希望bob[1]
仍然是[a,b]
而不是[b]
。我确信这是JS中记录良好的部分,但我不确定如何搜索它。谢谢你的帮助。
答案 0 :(得分:2)
复制bob [1]
var bob = {
"1": ["a", "b"]
}
var jim = bob[1].slice(0)
jim.shift()
print(bob[1])
答案 1 :(得分:1)
JavaScript中的对象值是引用,而不是完整的对象作为值。将bob[1]
分配给jim
时,jim
和bob[1]
都会引用同一个对象(数组)。通过一个引用更改数组不会影响另一个引用;他们都指向同一个(改变的)数组。