Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象的Javascript引用_Javascript - Fatal编程技术网

对象的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