Деструктурирующее присваивание

разбираюсь с деструктуризацией

Подскажите, почему когда я обращаюсь к свойству через переменную созданную деструктуризацией, получаю undefined, а не значение ключа как в обращении через ключ console.log(obj['key']) // 'otvet'

const obj = {
  key: 'otvet'
}


let {option} = obj
console.log(obj[option]) // undefined
console.log(obj['key']) // 'otvet'


Ответы (1 шт):

Автор решения: SwaD

При деструктуризации, вы вытаскиваете значения в переменную, одноименную с названием ключа. Т.е. вытаскивание данных идет по ключу.

Если в объекте нет указанного ключа, вы получате undefined

    const obj = {
      key: 'otvet',
      some: 'someValue'
    }
    
    const { key, some } = obj;
    
    console.log('key', key)
    console.log('some', some)
    
    // Если надо задать другие наименования переменных при деструктуризации
    const { key: myKey, some: value} = obj;
    
    console.log('myKey', myKey)
    console.log('value', value)

Обратите внимание, что в переменных лежит значение, а не ключ, поэтому обращение вида obj[key] неверно, т.к. это воспрмится как obj['otvet']

Такое может получиться только в одном случае(случайно или умышленно), когда значение совпадает с ключом:

const obj = {
  key: 'key',
  some: 'data',
  data: 'value'
}

const { key, some, data } = obj;
console.log(obj[key])
console.log(obj[some])
console.log(obj[data])

Однако результат будет не тот, который вы ожидаете

→ Ссылка