Object函式的內建方法 Object.getOwnPropertyDescriptor
阿新 • • 發佈:2022-03-30
一、定義
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"的,所以會返回相應的屬性描述符。
同時我們也可以注意到,如果第二個引數不是字串,也會被強制轉換為字串。