@yankoyski

Почему foo.x === undefined?

Есть код:

let foo = {};

foo.x = foo = {n: 2};

console.log(foo.x === undefined);


Почему foo.x === undefined? Если можно, простым языком, и где можно про это почитать?
  • Вопрос задан
  • 880 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Все достаточно просто, хоть и не совсем очевидно.
Выражение:
foo.x = foo = {n: 2};
равносильно:
foo.x = (foo = {n: 2});

Мы присваиваем объекту по идентификатору foo свойство x, которое равно результату операции присваивания идентификатору foo ссылки на объект { n: 2 }.

Чтобы в этом убедиться достаточно добавить переменную bar, присвоить ей начальное значение foo и вывести в конце:
let foo = {};

const bar = foo;

foo.x = (foo = {n: 2});

console.log(foo.x === undefined);  // true

console.log(bar);  // { x: { n:  2 } }

console.log(bar.x === foo);  // true


Ключевые отличия операций присваивания, которые важно понимать:
foo.x = - присваивание свойства конкретному объекту. На момент вызова в нашем примере это {}.
foo = - присваивание значения самому идентификатору foo. Это может быть примитив, ссылка на объект или функцию. В нашем случае это объект { n: 2 }.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы