当我们使用数组名称而不是扩展运算符时有什么区别?
What is the difference when we use array names instead of spread operator?
如果我使用有什么区别:
var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? numbers : '';
而不是这个:
var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? [...numbers] : '';
使用的区别:
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
展开运算符 (...
) 将数组展开为单个值,而不是值数组。如下面的代码片段所示,numbers
是一个整数数组,而 ...numbers
是 3 个独立的整数。所以 [...numbers]
会给你一个具有相同值的新数组,而 numbers
只是对现有数组的引用。
var numbers = [1, 2, 3]
console.log(numbers);
console.log(...numbers);
由于数据结构的分配指向内存中的相同 space,如果您有两个变量引用同一个数组,改变一个变量将改变另一个。也就是说:
如果x = [1, 2, 3]
和 y = x
然后我们说 x.push(5)
y
也会有那个 5 因为它们指向同一个实例。如果您使用 [...x]
,您将创建 x 的副本。它消耗 O(n) 内存,一个新的引用。所以如果 x 改变了,y 将不受影响。
点差干净整洁,但确实有开销。如果用于非常大的数据集,它们将影响性能。
如果我使用有什么区别:
var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? numbers : '';
而不是这个:
var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? [...numbers] : '';
使用的区别:
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
展开运算符 (...
) 将数组展开为单个值,而不是值数组。如下面的代码片段所示,numbers
是一个整数数组,而 ...numbers
是 3 个独立的整数。所以 [...numbers]
会给你一个具有相同值的新数组,而 numbers
只是对现有数组的引用。
var numbers = [1, 2, 3]
console.log(numbers);
console.log(...numbers);
由于数据结构的分配指向内存中的相同 space,如果您有两个变量引用同一个数组,改变一个变量将改变另一个。也就是说:
如果x = [1, 2, 3]
和 y = x
然后我们说 x.push(5)
y
也会有那个 5 因为它们指向同一个实例。如果您使用 [...x]
,您将创建 x 的副本。它消耗 O(n) 内存,一个新的引用。所以如果 x 改变了,y 将不受影响。
点差干净整洁,但确实有开销。如果用于非常大的数据集,它们将影响性能。