Ошибка объявления разрушения со значением

1

Я не могу понять, почему после деструктивного назначения items prop не равны Gorilla.

Он будет использоваться после удаления основных items: "Piggi" в параметрах объекта происхождения. Я не понимаю почему...

    'use strict';
    
    let options = {
      size: 100,
      items: "Piggi"
    }
    
    let { title="Menu", items:w="Gorilla", size } = options;
    
    let a = title;
    let b = w;
    console.log(a + " - " + b);  // must be "Menu - Gorilla"
  • 0
    Где разрушение, о котором ты говоришь? Все, что я могу видеть, это переназначение
  • 0
    @eithed - let { title="Menu", items:w="Gorilla", size } = options; Может быть, вы называете это переназначение ...
Показать ещё 4 комментария
Теги:
function

3 ответа

3
Лучший ответ

В объявлении деструкции с инициализацией здесь:

let { items:w = "Gorilla" } = options;

синтаксис означает объявить переменную с именем "w", значение которой должно быть инициализировано значением значения, называемого "items" в объекте, на которое ссылаются "параметры", или если такого свойства нет в строке "Gorilla",,

В этом случае переменная "w" инициализируется значением свойства "items" в исходном объекте.

Если вы не хотите принимать значение из исходного объекта, не делайте этого:

let w = "Gorilla";
  • 0
    Так что, как я понимаю, в объявлении деструктуризации мы не можем перезаписать значение, которое ранее присвоено переменной в объекте
  • 1
    Правильно; весь смысл деструктуризации заключается в извлечении значений свойств из «исходного» объекта. Если вам не нужны значения свойств, не имеет смысла использовать декларацию деструктурирования. Обратите внимание, что вы можете объединить простое объявление / инициализацию с объявлением деструктурирования в том же операторе let или var .
1

Когда вы анализируете код, вы получаете здесь три метода:

  1. свойства короткой руки

    { foo, bar }
    

    за

    { foo: foo, bar: bar}
    
  2. значения по умолчанию

    { foo = 42 }
    

    который

    { foo: foo = 42 }
    
  3. изменение цели в шаблоне назначения объектов Object [You Do not Know JS: ES6 & Beyond, Chapter 2: Syntax]:

    Синтаксический шаблон здесь - source: target (или value: variable-alias).

    { foo: bar }
    

Синтез - это новая цель w для старых items свойств со значением по умолчанию 'Gorilla'.

0
let options = {
  size: 100,
  items: "Piggi"
}

let { title="Menu", items:w="Gorilla", size } = options;

let a = title;
let b = w;
console.log(a + " - " + b);

Решение. Проблема в том, что мы переписываем глобальный объект. поэтому у вас есть титиле как меню, но у объекта option нет свойства тита. Таким образом, когда вы назначаете глобальный объект с параметром, у него все еще есть элементы как "piggi" плюс вы не можете назначить такой объект, вам нужно переназначить каждое свойство в javascript. Надеюсь, ты получил свой ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню