Object函数的内置方法 Object.getOwnPropertyDescriptor

一、定义

Object.getOwnPropertyDescriptor()方法获取指定对象指定的自有属性的属性描述符。

二、语法

Object.getOwnPropertyDescriptor(obj, prop);

参数

obj:要获取的对象

prop:要获取的自有属性的属性名(字符串)

返回

如果prop是obj的自有属性,则返回属性描述符对象。如果prop不存在或非自有属性,则返回undefined。

该方法允许对一个属性的描述进行检索。在 Javascript 中,属性由一个字符串类型的“名字”和一个“属性描述符”对象构成。

三、示例

示例1:获取自有属性的属性描述符

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

示例2:获取继承属性的属性描述符

var obj1 = { a: 1 };
var obj2 = Object.create(obj1);
obj2.a; // 1
Object.getOwnPropertyDescriptor(obj2, 'a');  // undefined

obj2.a访问的是原型对象obj1上的属性,而Object.getOwnPropertyDescriptor()获取的是指定对象的自有属性,故上述示例返回undefined。

 

示例3:获取不存在的属性的属性描述符

var obj = {};
Object.getOwnPropertyDescriptor(obj, 'a');  // undefined

obj中并不存在属性a,Object.getOwnPropertyDescriptor()方法返回undefined。

示例4:获取非对象的属性描述符

// ES6环境下
var str = 'abcd';
Object.getOwnPropertyDescriptor(str, 0);
// Object {value: "a", writable: false, enumerable: true, configurable: false}

在ES5中,第二步的操作会引发TypeError,因为传入Object.getOwnPropertyDescriptor()的第一个参数不是对象。

在ES6中,如果传入Object.getOwnPropertyDescriptor()的第一个参数不是对象,会被强制转换为对象。

故上述传入方法的str会被强制转换为对象new String('abcd'),而转换后的对象是拥有属性"0"的,所以会返回相应的属性描述符。

同时我们也可以注意到,如果第二个参数不是字符串,也会被强制转换为字符串。

posted @ 2022-03-30 11:01  之鹿喵  阅读(485)  评论(0编辑  收藏  举报