2016-01-29 2 views
4

Я не люблю , , здесь:Что я могу использовать в качестве заполнителей в деструкции массива es6?

let colors = [ "red", "green", "blue" ]; 
let [ , , thirdColor] = colors; 

Могу ли я использовать некоторые местозаполнители символы? Я бы предпочел не вводить неиспользуемые переменные, я просто хочу сделать код более понятным. Прямо сейчас единственное, о чем я могу думать, это комментарии:

let [/*first*/, /*second*/, thirdColor] = colors; 

Любые лучшие идеи?

ответ

8

В JS нет понятия заполнителя. Часто _ используется для этого, но вы не можете использовать его больше, чем когда-то в одной декларации:

let [_, secondColor] = colors; // OK 
let [_, _, thirdColor] = colors; // error 

Кроме того, _ фактически могут быть использованы в вашем коде, так что вам придется придумать другой имя и т.д.

Самый простой способ может быть, чтобы получить доступ к третьему элементу напрямую:

let thirdColor = colors[2]; 
let {2: thirdColor, 10: eleventhColor} = colors; 
+1

Если '[_, _, thirdColor]' на самом деле производят ошибку? Реализация Firefox позволяет это; Я не нырнул в спецификацию, чтобы понять, не так ли. – apsillers

+2

'[_, _, thirdcolor] = ....' и 'let [_, _, thirdColor] = ...' разные. Первый из них прекрасен, поскольку это просто назначение переменной, а второе - объявление переменной, а 'let' не разрешает повторные объявления. Firefox также генерирует ошибку в этом случае: '(function() {" use strict "; let [_, _,] = [1,2];}())' дает 'TypeError: redeclaration of let _'. –

+1

О, я тестировал область верхнего уровня, которая, по-видимому, позволяет «let' re-declarations. (Действительно, я могу оценить, что 'let' не имеет особого значения, когда ваша переменная имеет видимость верхнего уровня, поэтому я могу понять, почему там может быть другое поведение.) Когда я перемещаю ее внутри функции или блока, это действительно выдает ошибку. – apsillers