对象的Javascript引用
我不知道如何解释这个问题,所以我将用代码来说明对象的Javascript引用,javascript,Javascript,我不知道如何解释这个问题,所以我将用代码来说明 var bob = { "1": ["a", "b"] } var jim = bob[1] jim.shift() print(bob[1]) 用d8运行这个命令,我得到了[b]的输出 请注意,当我修改jim时,bob(我从jim引用的对象)是如何被更改的。我希望修改jim对bob没有任何影响。也就是说,即使在shift()之后,我希望bob[1]仍然是[a,b]而不是[b]。我确信这是JS的一个文档化的部分,但我不确定如何搜索它
var bob = {
"1": ["a", "b"]
}
var jim = bob[1]
jim.shift()
print(bob[1])
用d8运行这个命令,我得到了[b]
的输出
请注意,当我修改
jim
时,bob
(我从jim引用的对象)是如何被更改的。我希望修改jim
对bob
没有任何影响。也就是说,即使在shift()
之后,我希望bob[1]
仍然是[a,b]
而不是[b]
。我确信这是JS的一个文档化的部分,但我不确定如何搜索它。感谢您的帮助。JavaScript中的对象值是引用,而不是作为值的完整对象。将bob[1]
指定给jim
时,jim
和bob[1]
都引用同一对象(数组)。通过一个引用更改数组不会影响另一个引用;它们都指向同一个(已更改的)数组。JavaScript中的对象值是引用,而不是作为值的完整对象。将bob[1]
指定给jim
时,jim
和bob[1]
都引用同一对象(数组)。通过一个引用更改数组不会影响另一个引用;它们都指向同一个(已更改的)数组。JavaScript中的对象值是引用,而不是作为值的完整对象。将bob[1]
指定给jim
时,jim
和bob[1]
都引用同一对象(数组)。通过一个引用更改数组不会影响另一个引用;它们都指向同一个(已更改的)数组。JavaScript中的对象值是引用,而不是作为值的完整对象。将bob[1]
指定给jim
时,jim
和bob[1]
都引用同一对象(数组)。通过一个引用更改数组不会影响另一个引用;它们都指向同一个(已更改的)数组。复制bob[1]
var bob = {
"1": ["a", "b"]
}
var jim = bob[1].slice(0)
jim.shift()
print(bob[1])
复制一份bob[1]
var bob = {
"1": ["a", "b"]
}
var jim = bob[1].slice(0)
jim.shift()
print(bob[1])
复制一份bob[1]
var bob = {
"1": ["a", "b"]
}
var jim = bob[1].slice(0)
jim.shift()
print(bob[1])
复制一份bob[1]
var bob = {
"1": ["a", "b"]
}
var jim = bob[1].slice(0)
jim.shift()
print(bob[1])
出于某种原因,这种或那种形式的问题最近出现了很多。谷歌的javascript引擎通过shell(与节点相同)查找“JS通过引用或值传递”、“JS扩展对象”等等。@goodcow:
V8
是谷歌的JS引擎。@cookiemonster这种或那种形式的问题最近出现了很多,出于某种原因。谷歌的javascript引擎通过外壳(与节点相同)查找“JS通过引用或值传递”、“JS扩展对象”等。@goodcow:V8
是谷歌的JS引擎。@CookieMonester出于某种原因,这个问题最近以某种形式出现了很多。谷歌的javascript引擎通过外壳(与node相同)查找“JS按引用或值传递”、“JS扩展对象”等。@goodcow:V8
是谷歌的JS引擎。@CookieMonester出于某种原因,这个问题最近以某种形式出现了很多。谷歌的javascript引擎通过shell(与node相同)查找“JS按引用或值传递”,“JS扩展对象“,等等。@goodcow:V8
是谷歌的JS引擎。@cookiemonster我怎样才能得到我想要的行为?我必须克隆对象还是什么?或者有办法删除引用吗?是的,克隆对象是一个解决方案。@goodcow是的,你必须自己克隆对象。对于数组,你可以使用jim=bob[1]。切片(0)
-请注意,克隆对象通常是一个很难解决的问题。如果可能的话,最好避免复制对象,因为它显然不是免费的(就性能而言).所以一般来说,最好克隆对象的字段,而不是对象本身?@goodcow好吧,问题是它有可能变得非常混乱。在这种情况下,它很简单,所以没有问题。但是,对于更复杂的对象,很难弄清楚复制什么以及如何复制它;没有好的通用的always-w换句话说,Works解决方案。我如何才能获得我想要的行为?我必须克隆对象还是什么?或者有办法删除引用吗?是的,克隆对象是一个解决方案。@goodcow是的,你必须自己克隆对象。对于数组,你可以使用jim=bob[1]。切片(0)
-请注意,克隆对象通常是一个很难解决的问题。如果可能的话,最好避免复制对象,因为它显然不是免费的(就性能而言).所以一般来说,最好克隆对象的字段,而不是对象本身?@goodcow好吧,问题是它有可能变得非常混乱。在这种情况下,它很简单,所以没有问题。但是,对于更复杂的对象,很难弄清楚复制什么以及如何复制它;没有好的通用的always-w换句话说,Works解决方案。我如何才能获得我想要的行为?我必须克隆对象还是什么?或者有办法删除引用吗?是的,克隆对象是一个解决方案。@goodcow是的,你必须自己克隆对象。对于数组,你可以使用jim=bob[1]。切片(0)
-请注意,克隆对象通常是一个很难解决的问题。如果可能的话,最好避免复制对象,因为它显然不是免费的(就性能而言).所以一般来说,最好克隆对象的字段,而不是对象本身?@goodcow好吧,问题是它有可能变得非常混乱。在这种情况下,它很简单,所以没有问题。但是,对于更复杂的对象,很难弄清楚复制什么以及如何复制它;没有好的通用的always-w换句话说,Works解决方案。我怎样才能获得我想要的行为?我必须克隆对象还是什么?或者有没有办法删除引用?是的,克隆对象是一个解决方案。@goodc