与前俩篇博客相对应,该篇继续介绍Object(对象)的常用API。
四、Object.getOwnPropertyDescriptor( obj, prop )
获取obj这个对象的prop属性的属性描述符(property descriptor)
example如下:
var obj = {
x: 1
}
console.log( Object.getOwnPropertyDescriptor( obj,"x" ) );
//{ value: 1, writable: true, enumerable: true, configurable: true}
五、ES8新增的Object的方法
(一)Object.entries( obj )
获取obj这个对象的键名和键值,且以二维数组的形式输出
example如下:
var obj = {
x: 1,
y:2
}
console.log( Object.entries( obj ) );
//[[x,1],[y,2]]
(二)Object.keys( obj )
获取obj这个对象的键值,且以数组的形式输出
example如下:
var obj = {
x: 1,
y:2
}
console.log( Object.keys( obj ) );
//[x,y]
(三)Object.values( obj )
获取obj这个对象的所有键值,且以数组的形式输出
example如下:
var obj = {
x: 1,
y:2
}
console.log( Object.values( obj ) );
//[1,2]
以上三个方法均为ES8新增的方法,其与for....in的区别在于for...in会遍历对象原型链上的属性,而 这三个方法不会;
六、Obj.hasOwnProperty(prop)
Obj--------------------------------要进行验证的对象
prop-------------------------------要进行验证的属性
若obj中有prop这个属性,结果为true,若没有,结果为false;
example如下:
var obj = {
x: 1,
y:2
}
console.log( obj.hasOwnProperty( "x" ) );//true
console.log( obj.hasOwnProperty( "z" ) );//false
七、Object.getPrototypeOf(obj)
Obj--------------------------------要进行操作的对象
该API的返回值为obj这个对象的原型链上一级的对象,即其 __proto__
example如下:
var obj = {
x: 1,
y:2,
__proto__: {
z: 3,
d: 4
}
}
console.log( Object.getPrototypeOf( obj ) );
//{ z:3,d:4 }
八、Object.setPrototypeOf(obj,protoObj)
Obj--------------------------------要进行操作的对象
protoObj---------------------要为obj设置的上一级原型对象
将protoObj设置为obj这个对象的原型链上一级的对象,即其 __proto__,会覆盖原有proto
example如下:
var obj = {
x: 1,
y:2,
__proto__: {
z: 3,
d: 4
}
}
Object.setPrototypeOf( obj, { m:333 } ) );
console.log( obj )
// { x:1,y:2,__proto__:{m:333}}//会将原有的__proto__对象覆盖掉
九、Object.freeze(obj)/Object.isFrozen(obj)
(一)Object.freeze(obj)
Obj--------------------------------要进行操作的对象
冻结该对象,使其无法添加、修改、删除属性,且其属性描述符(如writable、enumerable等)也均无法被修改,其该API返回值为被冻结的对象
(二)Object. isFrozen(obj)
Obj--------------------------------要进行操作的对象
与方法一相对应,判断该对象是否被冻结;