对象特性
原型属性
原型属性是在实例对象创建之初就设置好的。
将对象作为参数传入Object.getPrototypeOf()可以查询它的原型。要想检测一个对象是否是另一个对象的原型(或处于原型链中),使用isPrototypeOf()方法。和instanceof运算符非常类似。
let o = { x: 1 };
let p = Object.create(o);
p.y = 2;
console.log(Object.getPrototypeOf(p));
console.log(o.isPrototypeOf(p));
可扩展性
对象的可扩展性用以表示是否可以给对象添加新属性。
所有内置对象和自定义对象都是显式可扩展的。
宿主对象的可扩展性是由JavaScript引擎定义的。
序列化对象
对象序列化(serialization)是指将对象的状态转换为字符串,也可将字符串还原为对象。
ECMAScript 5提供了内置函数JSON.stringify()和JSON.parse()用来序列化和反序列化JavaScript对象。
JSON的全称是"JavaScript Object Notation"——JavaScript对象表示法
注意事项
函数、RegExp、Error对象和undefined值不能序列化和还原。
JSON.stringify()只能序列化对象可枚举的自有属性。
对于一个不能序列化的属性来说,在序列化后的输出字符串中会将这个属性省略掉。
Object 构造函数的方法
Object构造函数提供了如下方法:
Object.assign():通过复制一个或多个对象来创建一个新的对象。
Object.create():使用指定的原型对象和属性创建一个新对象。
Object.defineProperty():给对象添加一个属性并指定该属性的配置。
Object.defineProperties():给对象添加多个属性并分别指定它们的配置。
Object.entries():返回给定对象自身可枚举属性的 [key, value] 数组。
Object.freeze():冻结对象:其他代码不能删除或更改任何属性。
Object.getOwnPropertyDescriptor():返回对象指定的属性配置。
Object.getOwnPropertyNames():返回一个数组,它包含了指定对象所有的可枚举或不可枚举的属性名。
Object.getOwnPropertySymbols():返回一个数组,它包含了指定对象自身所有的符号属性。
Object.getPrototypeOf():返回指定对象的原型对象。
Object.is():比较两个值是否相同。所有 NaN 值都相等(这与==和===不同)。
Object.isExtensible():判断对象是否可扩展。
Object.isFrozen():判断对象是否已经冻结。
Object.isSealed():判断对象是否已经密封。
Object.keys():返回一个包含所有给定对象自身可枚举属性名称的数组。
Object.preventExtensions():防止对象的任何扩展。
Object.seal():防止其他代码删除对象的属性。
Object.setPrototypeOf():设置对象的原型(即内部 [[Prototype]] 属性)。
Object.values():返回给定对象自身可枚举值的数组。