对象
笔记:
JavaScript
中的对象有字面形式(比如var a = { .. }
)和构造形式(比如 var a = new Array(..)
)。字面形式更常用,不过有时候构造形式可以提供更多选项。
许多人都以为“JavaScript
中万物都是对象”,这是错误的。对象是 6 个(或者是 7 个,取 决于你的观点)基础类型之一。对象有包括 function
在内的子类型,不同子类型具有不同 的行为,比如内部标签 [object Array] 表示这是对象的子类型数组。
对象就是键 / 值对的集合。可以通过 .propName
或者 ["propName"]
语法来获取属性值。访 问属性时, 引擎实际上会调用内部的默认 [[Get]]
操作(在设置属性值时是[[Put]]
),[[Get]]
操作会检查对象本身是否包含这个属性,如果没找到的话还会查找 [[Prototype]]
链(原型链)。
属性的特性可以通过属性描述符来控制,比如 writable
和configurable
。此外,可以使用 Object.preventExtensions(..)
(禁止拓展)、 Object.seal(..)
(密封)和 Object.freeze(..)
(冻结)来设置对象(及其 属性)的不可变性级别。
属性不一定包含值——它们可能是具备getter/setter
的“访问描述符”。此外,属性可以是 可枚举或者不可枚举的,这决定了它们是否会出现在 for..in
循环中。
你可以使用ES6
的for..of
语法来遍历数据结构(数组、对象, 等等)中的值, for..of
会寻找内置或者自定义的 @@iterator
对象并调用它的 next()
方法来遍历数据值。