对象

[[Put]] 被触发时,实际的行为取决于许多因素,包括对象中是否已经存在这个属性(这是最重要的因素)

如果存在这个属性,[[Put]] 算法会大致检查下面这些内容:

  1. 属性是佛是访问描述符?如果是并且存在 setter 就调用 setter。
  2. 属性的数据描述符中 writable 是否是 false?如果是,在非严格模式下静默失败,在严格模式下抛出 TypeError 异常。
  3. 如果都不是,将该值设置为属性的值。

如果对象中不存在这个属性,[[put]] 操作会更加复杂。

for...in 遍历的是对象中所有可枚举属性,你需要手动获取属性值

属性的特性可以通过属性描述符来控制,比如 writable 和 configurable。此外,可以使用 Object.preventExtensions(...)、Object.seal(..) 和 Object.freeze(..) 来设置对象的不可变性级别。

可以使用 ES6 中 for...of 来遍历数据结构(数组、对象,等等)中的值,for...of 会寻找或者自定义的 @@iterator 对象并调用它的 next() 方法来遍历数据值。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容