导入的对象是不可写的吗?

sfl*_*che 1 javascript ecmascript-6

我得到导入具有不可变的绑定.

以为导入的对象是不可写的,但后来我尝试以下内容并且它工作得很好......

文件#1

export let creature = { 
    name: 'Oscar'
}
Run Code Online (Sandbox Code Playgroud)

文件#2

import { creature } from './file-1';

console.log(creature.name); // Oscar
creature.name = 'Winnie'; 
console.log(creature.name); // Winnie;
Run Code Online (Sandbox Code Playgroud)

假设#1

如果导入的对象是不可写的,对于上述情况,我应该可以说

creature.foo = 'bar'; 
Run Code Online (Sandbox Code Playgroud)

因为还没有creature被叫的财产foo

但我不能

creature.name = 'Winnie'; 
Run Code Online (Sandbox Code Playgroud)

因为已经存在name属性creature并且(参见假设#2)导入的对象是不可写的.

假设#2(或者我应该说先前的假设...)

导入的对象是不可写的.

那么导入的对象不是不可写的吗?
或者我不明白什么是不可写的意思?

Fel*_*ing 6

进口几乎就像consts*.该结合是不可变的,你可以不分配新的值给它,但如果该值是可变的,可以对其进行更新.这包括在对象的情况下添加,更新或删除属性.

或者我不明白什么是不可写的意思?

绑定可以是可写的和不可写的(只读).这仅仅意味着是否可以为其分配新值.

在谈论对象时,属性可以是可写的或不可写的(只读).有关完整的对象,它可能是最好使用条款"冻结","密封""非扩展"(?),要与保持一致Object.freeze,Object.sealObject.preventExtensionsAPI的.


*:"几乎",因为导出这些绑定的模块实际上可以为它们分配新值.