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

时间:2017-04-25 00:15:28

标签: javascript ecmascript-6

我认为导入具有不可变的绑定。

以为导入的对象是不可写的,但后来我尝试了以下内容,它运行得很好......

档案#1

export let creature = { 
    name: 'Oscar'
}

档案#2

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

console.log(creature.name); // Oscar
creature.name = 'Winnie'; 
console.log(creature.name); // Winnie;

假设#1

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

creature.foo = 'bar'; 

因为creature上还没有名为foo

的属性

但是我应该 能够说

creature.name = 'Winnie'; 

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

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

导入的对象不可写。

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

1 个答案:

答案 0 :(得分:6)

进口几乎与const s *相同。 绑定是不可变的,您不能为其分配新值,但如果值为 mutable ,则可以更新它。这包括在对象的情况下添加,更新或删除属性。

  

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

Bindings 可以是可写的,也是不可写的(只读)。这仅仅意味着是否可以为其分配新值。

在谈论对象时,属性可以是可写的或不可写的(只读)。对于完整的对象,最好使用术语"冻结" "密封" &#34 ;不可扩展的" (?),与Object.freezeObject.sealObject.preventExtensions API保持一致。

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