各種遍歷對象的方法返回值的不同 前置代碼: function Obj() { // 直接在this上添加屬性 this.prop_this = 'prop_this'; // 在this上添加symbol屬性 this[Symbol.for('prop_symbol')] = 'prop_symbo ...
各種遍歷對象的方法返回值的不同
前置代碼:
function Obj() {
// 直接在this上添加屬性
this.prop_this = 'prop_this';
// 在this上添加symbol屬性
this[Symbol.for('prop_symbol')] = 'prop_symbol';
}
// 原型上添加屬性
Obj.prototype.propProto = 'prop_proto';
const obj = new Obj();
// 設置遍歷屬性enumerable設置為否
Object.defineProperty(obj, 'prop_dontEnum', {
value: 'prop_dontEnum',
enumerable: false,
writable: false,
configurable: false
});
getOwnPropertyDescriptors 可以獲取所有的自身屬性描述
console.log(Object.getOwnPropertyDescriptors(obj)); // { prop_this: { value: 'prop_this', writable: true, enumerable: true, configurable: true }, prop_dontEnum: { value: 'prop_dontEnum', writable: false, enumerable: false, configurable: false }, [Symbol(prop_symbol)]: { value: 'prop_symbol', writable: true, enumerable: true, configurable: true } }
getOwnPropertyNames 可以獲取自身除symbol之外的屬性,獲取自身symbol值可以使用 getOwnPropertySymbols
console.log(Object.getOwnPropertyNames(obj)); // [ 'prop_this', 'prop_dontEnum' ] console.log(Object.getOwnPropertySymbols(obj)); // [ Symbol(prop_symbol) ]
for...in 可以獲取自身可以枚舉除symbol外的屬性和原型屬性
for(var i in obj) { console.log(i); } // prop_this propProto
Object.keys 和 Object.values 都只可以獲取自身除了symbol外可枚舉的屬性
console.log(Object.keys(obj)); // [ 'prop_this' ]
Reflect.ownKeys(obj)可以獲取自身所有的屬性
console.log(Reflect.ownKeys(obj)); // [ 'prop_this', 'prop_dontEnum', Symbol(prop_symbol) ]