属性形容对象

Object.getOwnPropertyDescriptor()

Object.getOwnPropertyDescriptor()办法能够获取属性形容对象。它的第一个参数是指标对象,第二个参数是一个字符串,对应指标对象的某个属性名。

var obj = { p: 'a' };Object.getOwnPropertyDescriptor(obj, 'p')// Object { value: "a",//   writable: true,//   enumerable: true,//   configurable: true// }

下面代码中,Object.getOwnPropertyDescriptor()办法获取obj.p的属性形容对象。

Object.getOwnPropertyNames()

Object.getOwnPropertyNames办法返回一个数组,成员是参数对象本身的全副属性的属性名,不论该属性是否可遍历。

var obj = Object.defineProperties({}, {  p1: { value: 1, enumerable: true },  p2: { value: 2, enumerable: false }});Object.getOwnPropertyNames(obj)// ["p1", "p2"]

Object.prototype.propertyIsEnumerable()

var obj = {};obj.p = 123;obj.propertyIsEnumerable('p') // trueobj.propertyIsEnumerable('toString') // false

下面代码中,obj.p是可遍历的,而obj.toString是继承的属性。

Object.preventExtensions() #

Object.preventExtensions办法能够使得一个对象无奈再增加新的属性。

var obj = new Object();Object.preventExtensions(obj);Object.defineProperty(obj, 'p', {  value: 'hello'});// TypeError: Cannot define property:p, object is not extensible.obj.p = 1;obj.p // undefined

Object.isExtensible() #

Object.isExtensible办法用于查看一个对象是否应用了Object.preventExtensions办法。

var obj = new Object();Object.isExtensible(obj) // trueObject.preventExtensions(obj);Object.isExtensible(obj) // false

Object.seal() #

Object.seal办法使得一个对象既无奈增加新属性,也无奈删除旧属性。

var obj = { p: 'hello' };Object.seal(obj);delete obj.p;obj.p // "hello"obj.x = 'world';obj.x // undefined

Object.isSealed() #

Object.isSealed办法用于查看一个对象是否应用了Object.seal办法。

var obj = { p: 'a' };Object.seal(obj);Object.isSealed(obj) // true

Object.freeze()

Object.freeze办法能够使得一个对象无奈增加新属性、无奈删除旧属性、也无奈扭转属性的值,使得这个对象实际上变成了常量。

var obj = {  p: 'hello'};Object.freeze(obj);obj.p = 'world';obj.p // "hello"obj.t = 'hello';obj.t // undefineddelete obj.p // falseobj.p // "hello"

Object.isFrozen() #

Object.isFrozen办法用于查看一个对象是否应用了Object.freeze办法。

var obj = {  p: 'hello'};Object.freeze(obj);Object.isFrozen(obj) // true