当我们使用数组名称而不是扩展运算符时有什么区别?

时间:2018-06-05 19:18:26

标签: javascript ecmascript-6 ecmascript-5

如果我使用有什么区别:

var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? numbers : '';

而不是:

var numbers = [1, 2, 3]
var mainArray = (numbers.length > 1) ? [...numbers] : '';

3 个答案:

答案 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);