Свойство, недоступное для записи, возвращает новое значение во время присвоения, но не после

#javascript

Вопрос:

Почему присвоение неписаному свойству изначально возвращает обновленное значение?

В приведенном ниже примере мы обновляем свойство, недоступное для записи. Как и ожидалось, значение фактически не обновляется. Как ни странно, выражение с оператором присваивания ДЕЙСТВИТЕЛЬНО возвращает обновленное значение. Почему это так? Я бы ожидал, что оператор присваивания вернет левое значение, которое является obj.foo значением.

Документы MDN для Object.defineProperty, в том числе, когда свойство недоступно для записи.

 let obj = {};

Object.defineProperty(obj, 'foo', {
   value: 'Hello'
};

console.log(obj.foo  = ' World!'); // Returns 'Hello World!'

console.log(obj.foo); // Returns 'Hello'
 

Комментарии:

1. Что вы подразумеваете под «возвратами»? Как вы оцениваете стоимость недвижимости?

2. Значение выражения присваивания-это присвоенное значение, правая часть-в данном случае, как это фактически obj.foo = obj.foo ' World!' , 'Hello World!' оно не возвращает обновленное значение obj.foo , потому что, как вы заметили, это значение не обновляется.

3. @jonrsharpe — а! Я никогда этого не знал, я всегда думал, что операторы присваивания возвращают левую часть, а не вычисляемое значение, которое должно быть присвоено. Это дико, спасибо.

4. @Code-Ученик — обновил вопрос, я просто консоль. регистрация

5. @DonP Знакомы ли вы с разницей между значением l и значением r? Это ключ к пониманию того, почему присвоение оценивается значением, назначаемым справа, а не значением переменной, назначаемой слева.