2016-03-22 3 views
3

Все чаще я сталкиваюсь с кодом, использующим ES2015, который вводит назначение деструктуризации, и даже чаще мне очень сложно понять, что делает автор. Я вижу, что деструктурирование может быть очень полезным в некоторых случаях, но у меня создается впечатление, что он часто вводит ненужную сложность кода.Преимущества назначений деструктурирования в Javascript

E.g. Nested object and array destructuring пример на MDN использует эту линию у destructure вложенную массив:

var { title: englishTitle, translations: [{ title: localeTitle }] } = metadata; 

Где преимущество над чем-то вроде этого, что выглядит намного более читаемым мне:

var englishTitle = metadata.title, 
    localeTitle = metadata.translations[0].title; 

Какие проблемы решаются путем деструктурирования заданий?

Когда использовать их, а когда нет?

+2

Ваши две части кода не эквивалентны. 'localeTitle' - свойство title первого объекта в массиве' translations'. – MinusFour

+0

Да, спасибо! Я редактировал вопрос. – birnbaum

+1

В более простых случаях он сохраняет нажатия клавиш и по-прежнему читается 'const {foo, bar} = this.props;' vs 'const foo = this.props.foo; const bar = this.props.bar; ' – zerkms

ответ

3

Выгода заключается в том, что вам не нужно повторять деструктивное выражение. Разумеется, в вашем примере это вряд ли имеет значение, поскольку вы уже получили его в этой переменной metadata.

Но если это очень сложное выражение или что-то еще, вы можете сохранить дополнительную переменную. Например, сравните эту функцию

function example(metadata) { 
    var englishTitle = metadata.title, 
     localeTitle = metadata.translations[0].title; 
    …; // use englishTitle and localeTitle 
} 

в

function example({title: englishTitle, translations: [{title: localeTitle}]}) { 
    …; // use englishTitle and localeTitle 
} 

и она становится все более очевидным, как декларативное это.

Как верно для каждого синтаксического сахара: применяйте его только там, где он подслащает ваш код.

Смежные вопросы