#javascript #arrays #ecmascript-6 #syntax #spread-syntax
#javascript #массивы #ecmascript-6 #синтаксис #spread-синтаксис
Вопрос:
В настоящее время я работаю с синтаксисом spread и столкнулся с неожиданной проблемой.
Приведенный ниже фрагмент работает (как ожидалось) и не выдает никаких ошибок:
const arr = [1, 2, 3, 4] // create array of numbers
const copy = [...arr] // make a shallow copy of the array
copy.forEach(n => { // loop through array
console.log(n 1);
});
Однако, если я удаляю промежуточную переменную copy
, мой код, похоже, выдает ошибку:
const arr = [1, 2, 3, 4] // create array of numbers
[...arr].forEach(n => { // loop through array
console.log(n 1);
});
Как вы можете видеть, приведенный выше фрагмент кода выдает ошибку:
Неперехваченная ошибка синтаксиса: неожиданный токен…
В то время как первый фрагмент не делает этого. Почему это происходит? Насколько я понимаю, я должен быть в состоянии заменить copy
содержащийся в нем массив буквальным и не иметь проблем (как я сделал во втором фрагменте).
Я ожидаю, что второй фрагмент будет вести себя так же, как первый фрагмент, и не выдаст никаких ошибок.
Примечание: Я знаю, что в данном случае это [...arr]
кажется избыточным, я просто использовал это, чтобы продемонстрировать свою проблему.
Ответ №1:
Добавьте точку с запятой, и это работает идеально.
const arr = [1, 2, 3, 4];
[...arr].forEach(n => {
console.log(n 1);
});
Код вычислялся без перевода строки — вот так:
const arr = [1, 2, 3, 4][...arr]
Что привело к вашей ошибке.