let array1 = [88,66,33,44,11,67,32,56];
let array2 = new Array(array1);
array1.sort();
console.log(array2);
用随机值创建了一个array1。用new关键字创建了一个array2并用array1初始化它。排序了array1并打印出array2。我希望array2是未排序的
let array1 = [88,66,33,44,11,67,32,56];
let array2 = new Array(array1);
array1.sort();
console.log(array2);
用随机值创建了一个array1。用new关键字创建了一个array2并用array1初始化它。排序了array1并打印出array2。我希望array2是未排序的
3条答案
按热度按时间xxhby3vn1#
当
new Array
被调用时,会发生很多事情。所以如果你传递一个非数值参数,你会创建一个新的数组,这个数组的参数是一个值,而传递一个数组的参数会创建一个只有一个值的数组,这个值就是传递的数组.
该值是 * 传递的数组本身 *,而不是副本:
因此,当您对数组排序时(使用
array1
或array2[0]
的引用),因为它们引用同一个数组,所以无论您稍后检查哪个数组,都会看到排序后的结果。我期望array2是未排序的
请正确复制数组。不要使用
new Array
。nbnkbykc2#
传递给
Array
constructor的参数是新数组中的元素(除非是数字)。当你把
array1
传递给构造函数时,它不会被克隆,而是被设置为新数组的第一项。如果要克隆它,可以扩展数组,这会将它转换为参数列表,
Array
构造函数将根据该列表创建新数组。fumotvh33#
不复制
array1
。它等效于:这将创建一个数组,该数组的第一个元素是对与
array1
相同的数组的引用。然后对
array1
所做的任何修改也会影响array2[0]
,反之亦然。要创建
array1
的浅层副本,请用途: