Является ли импорт JS неизменным или недоступным для записи?

Из того, что я могу сказать, привязка импорта неизменна

import { foo } from './foo';
...
foo.bar = 23; // works 
...
foo = { bar: 23 }; // syntax error

Тем не менее, я читал в другом месте, что импорт JS на самом деле не для записи (не неизменяемый)... в этом случае не первый оператор присваивания, foo.bar = 23; и кинуть синтаксическую ошибку?

ОБНОВЛЕНИЕ (как я понимаю это сейчас)

... перефразируя отличный ответ @FelixKing...

Импорт JS - это неизменные привязки к экспортируемому объекту (переменная, функция и т. Д.).

Для не примитивного импорта это не означает, что свойства импортируемого объекта обязательно неизменяемы или недоступны для записи.

1 ответ

Решение

в этом случае не будет первого оператора присваивания, foo.bar = 23; и кинуть синтаксическую ошибку?

Непишущий для записи относится к значению переменной, где как изменяемый (неизменяемый) описывает, может ли само значение быть изменено на месте или нет.

Импорты не доступны для записи, как вы узнали. Но если значение импорта изменчиво, вы можете обновить значение (на месте).

foo.bar = 23;

не присваивает новое значение foo, Это читает значение foo и затем изменяя его (добавляя или перезаписывая свойство). Если вы сделали

var oldFoo = foo;
foo.bar = 23;
oldFoo === foo; // true

ты бы получил true, Это указывает на то, что foo имеет то же значение, присвоенное ему. Он только обновил значение (объект) на месте.

Все объекты являются изменяемыми (если не переданы Object.freeze или аналогичные функции), тогда как примитивные значения (String, Number и т. д.) являются неизменяемыми.

Другие вопросы по тегам