Является ли импорт 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 и т. д.) являются неизменяемыми.