js遍历对象的几种方法

js遍历对象的方法

    • for in
    • Object.keys()
    • Object.getOwnPropertyNames()
    • Object.getOwnPropertySymbols()
    • Reflect.ownKeys()

新建一个对象


let fn1 = function(){}
fn1.prototype.width = '1米';



let obj = {
	code: 200,
	data: [1, 2, 3],
	success: true,
	[Symbol('sy')]: 'symbole'
}

obj.__proto__ = fn1.prototype;

Object.defineProperty(obj, 'height',{
	enumerable: true,
	value: '2米',
});

打印该对象
console.log(obj);

js遍历对象的几种方法_第1张图片

for in

遍历自身所有可枚举的Symbol属性,包括__proto__上面的属性。


for(let key in obj){
	console.log(key);
}

返回结果:code data success width height

Object.keys()

遍历自身所有可枚举的Symbol属性,返回由对象属性名组成的数组。不包括__proto__上面的属性。


Object.keys(obj);

返回结果:['code', 'data', 'success', 'height']

Object.getOwnPropertyNames()

遍历自身所有的Symbol属性(无论是否可以枚举),返回由对象属性名组成的数组。不包括__proto__上面的属性。

//首先设置height属性为不可枚举

Object.defineProperty(obj, 'height', {
	value: '2米',
	enumerable: false,
});
Object.getOwnPropertyNames(obj);

返回结果:['code', 'data', 'success', 'height']

Object.getOwnPropertySymbols()

一看单词就知道,返回自身所有Symbol属性(无论是否可以枚举),返回由对象属性名组成的数组。不包括__proto__上面的属性。

// 在obj对象上定义一个属性

Object.defineProperty(obj, Symbol('yy'), {
     value: '2米',
     enumerable: false
 });
 Object.getOwnPropertySymbols(obj);
 
返回结果:[Symbol(sy), Symbol(yy)]

Reflect.ownKeys()

返回自身所有属性(无论是否可以枚举),返回由对象属性名组成的数组。不包括__proto__上面的属性。


Reflect.ownKeys(obj);

返回结果:['code', 'data', 'success', 'height', Symbol(sy), Symbol(yy)]

总结为以下表格

遍历对象方法 返回结果及类型 返回__proto__属性 返回不可枚举属性 返回Symbol属性
for in 属性名 字符串
Object.keys() 属性名组成的数组
Object.getOwnPropertyNames() 属性名组成的数组
Object.getOwnPropertySymbols() 属性名组成的数组
Reflect.ownKeys() 属性名组成的数组

你可能感兴趣的:(web前端,javascript,js,html5,html,es6)