Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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,我在玩JavaScript中的一些数组时遇到了一些奇怪的东西。这是我的密码: var origArray = new Array("one","two","three","four","five","six","seven","eight"); var newArray = origArray.slice(1,3); origArray[1] = "octopus"; console.log(newArray.join()); //prints two,three var origArra

我在玩JavaScript中的一些数组时遇到了一些奇怪的东西。这是我的密码:

var origArray = new Array("one","two","three","four","five","six","seven","eight");

var newArray = origArray.slice(1,3);
origArray[1] = "octopus";
console.log(newArray.join()); //prints two,three 

var origArray = new Array(["one","two"],["three","four"],["five","six"],["seven","eight"]);

var newArray = origArray.slice(1,3);
origArray[1][0] = "octopus";
console.log(newArray.join()); //prints octopus,four,five,six

我不明白为什么
newArray
在第二种情况下受影响,而不是第一种情况。这是怎么回事?

这是浅复制和深复制的区别


slice
结果是与原始对象不同的另一个对象,但这并不意味着数组中的对象(一直向下)是重复的。如果这些内部对象恰好是数组,它们将在副本和原始对象之间共享。

因为数组是引用,所以切片复制引用而不是值。

切片是浅拷贝,而不是深拷贝。@SethenMaleno:数组或任何其他对象。这是因为复制的是对对象的引用,而不是对象。使用基本体(字符串、数字、布尔值),将复制实际的基本体。(好的,有效。基本字符串——一般的字符串——是一种特殊情况,最好不要在这里讨论…@SethenMaleno:有效,是的。它与
var a=[]完全相同;var b=a;b、 推(1);控制台日志(a.长度)显示
1
,因为
a
b
引用相同的数组。或
var a={};a、 foo=“afoo”;var b=a;b、 foo=“bfoo”;console.log(a.foo)
记录
“bfoo”
,因为
a
b
引用同一对象。但
var a=5;b=a;b=6;控制台日志(a)
记录
5
,因为我们更改了
b
的内容,而不是它所指事物的状态。@SethenMaleno:最后一个示例:
var a={};a、 foo=“afoo”;var b=a;b={};b、 foo=“bfoo”;console.log(a.foo)“afoo”
的code>,因为我们给
b
分配了一个新值,所以此时
a
b
不再指向同一个对象。@SethenMaleno:这里的关键是变量所持有的值是什么(以及“变量”)所讨论的属性可以是对象中的属性,例如数组中的元素)。对于对象,所持有的值是对对象的引用,而不是对实际对象的引用。对于基本体,它(实际上)是实际的基本体。(现在真的完成了。:-)@T.J.Crowder谢谢你向我解释,伙计,你的安排很有道理。我真的很欣赏所有的例子!!你是最酷的!