如果我使用有什么区别:
var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? numbers : '';
而不是:
var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? [...numbers] : '';
答案 0 :(得分:4)
由于数据结构的分配指向内存中的相同空间,如果有两个引用相同数组的变量,则更改一个变量将改变另一个变量。也就是说:
如果x = [1, 2, 3]
和y = x
然后我们说x.push(5)
y
也会有5,因为它们指向同一个实例。如果您使用[...x]
,则表示您正在创建x的副本。它消耗O(n)内存,一个新的参考。因此,如果x被改变,y将不受影响。
答案 1 :(得分:1)
如果您使用以下区别:
var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? numbers : '';
//mainArray == numbers => true
此处它会将numbers
的引用分配给mainArray
而不是:
var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? [...numbers] : '';
//mainArray == numbers => false
此处它将从numbers
的元素创建新数组,并将其分配给mainArray
答案 2 :(得分:1)
扩展运算符(...
)将数组展开为单个值而不是值数组。如下面的代码所示,代码片段numbers
是一个整数数组,而...numbers
是3个单独的整数。因此[...numbers]
会为您提供一个具有相同值的新数组,numbers
只是对现有数组的引用。
var numbers = [1, 2, 3]
console.log(numbers);
console.log(...numbers);