对象
属性的类型
ECMA-262使用一些内部特征来描述属性的特征–比如
[[Enumerable]]属性分成两种:数据属性和访问器属性
1、数据属性-数据属性包含一个保存数据值的位置–数据属性有4个特性描述它们的行为
(1) [[Configurable]] 表示属性是否可以通过delete删除并重新定义, 是否可以修改它的特性,以及是否可以把它改成访问器属性. 默认true
(2) [[Enumerable]] 表示属性是否可以通过for-in循环返回。默认true
(3) [[Writable]] 表示属性的值是否可以被修改. 默认true
(4) [[Value]] 包含属性实际的值。默认undefined
在显示的添加属性到对象后, [[Configurable]]、[[Enumerable]]、[[Writable]] 默认true, 而 [[Value]] 被设置为指定的值.
**要修改属性的默认特性- Object.defineProperty() 方法。这个方法接收3个参数: 要给其添加属性的对象,属性名称,描述符对象. 最后一个参数(描述符对象)上的属性可以包含: configurable、enumerable、writable、value **
1  | let person = {};  | 
注意:在调用 Object.defineProperty() 时, configurable、enumerable、writable 如果不指定,都默认为false
2、访问器属性-访问器属性不包含数据值. 相反它们包含一个获取(getter)函数和一个设置函数(setter),不过这两个函数不是必须的.
访问器属性有4个特性描述它们的行为:
(1) [[Configurable]] 表示属性是否可以通过 delete 删除并重新定义, 是否可以修改它的特性,以及是否可以把它改成数据属性. 默认true
(2) [[Enumerable]] 表示属性是否可以通过 for-in 循环返回。默认 true
(3) [[Get]] 获取函数,在读取属性时调用。默认值为 undefined.
(4) [[Set]] 设置函数, 在写入属性时调用。默认值为 undefined.
1  | let book = {  | 
定义多个属性
Object.defineProperties()方法。这个方法可以通过多个描述符一次性定义多个属性. 接收两个参数:要为之添加或修改属性的对象和另一个描述符对象, 其属性与要添加或修改的属性一一对应
1  | let people = {};  | 
读取属性的特性
Object.getOwnPropertyDescriptor()方法。可以取得指定属性的描述符
Object.getOwnPropertyDescriptors()方法。这个方法会在每个属性上调用Object.getOwnPropertyDescriptor()并在一个新对象中返回它们。
1  | let obj = {};  | 
合并(merge)对象
Object.assign()方法。这个方法接收一个目标对象和一个或多个源对象作为参数,
然后将每个源对象中可枚举(Object.propertyIsEnumerable()返回true)和自有(Object.hasOwnProperty()返回true)属性复制到目标对象.
对每个符合条件的属性,这个方法会使用源对象上的[[Get]]取得属性的值,然后使用目标对象上的[[Set]]设置属性的值。
1  | let desc,src,result;  | 
对象标识及想等判定
Object.is()方法
1  | //这些事===符合预期的情况  | 
增强的对象语法
1  | // 1、属性值简写  |