В чем разница, когда мы используем имена массивов вместо оператора распространения? - PullRequest
0 голосов
/ 05 июня 2018

Какая разница, если я использую:

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

вместо этого:

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

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Оператор распространения (...) распределяет массив по отдельным значениям вместо массива значений.Как показано в приведенном ниже фрагменте кода numbers - это массив целых чисел, а ...numbers - это 3 отдельных целых числа.Так что [...numbers] даст вам новый массив с такими же значениями, а numbers - это просто ссылка на существующий массив.

var numbers = [1, 2, 3]
console.log(numbers);
console.log(...numbers);
0 голосов
/ 05 июня 2018

Поскольку присвоение структур данных указывает на одно и то же пространство в памяти, если у вас есть две переменные, ссылающиеся на один и тот же массив, изменение одной переменной изменит другую.То есть:

, если x = [1, 2, 3] и y = x, то мы говорим, что x.push(5) y также будет иметь эти 5, потому что они указывают на один и тот же экземпляр.Если вы используете [...x], вы создаете копию x.Он потребляет O (n) памяти, новую ссылку.Таким образом, если x изменяется, y не будет затронут.

спреды чистые и аккуратные, но у них есть накладные расходы.Они будут влиять на производительность, если используются с очень большим набором данных.

0 голосов
/ 05 июня 2018

Разница, если вы используете:

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

Здесь вместо mainArray 1006 *

будет присвоено значение numbers вместо:

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

Здесь он создаст новый массив из элементов numbers и присвоит его mainArray

...