对象遍历方法

各种遍历对象的方法返回值的不同

前置代码:

	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
	});
  1. 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 } 
     	 }
    
  2. getOwnPropertyNames 可以获取自身除symbol之外的属性,获取自身symbol值可以使用 getOwnPropertySymbols

     console.log(Object.getOwnPropertyNames(obj));
     // [ 'prop_this', 'prop_dontEnum' ]
     
     console.log(Object.getOwnPropertySymbols(obj));
     // [ Symbol(prop_symbol) ]
    
  3. for...in 可以获取自身可以枚举除symbol外的属性和原型属性

     for(var i in obj) {
     	console.log(i);
     }
     // prop_this  propProto
    
  4. Object.keys 和 Object.values 都只可以获取自身除了symbol外可枚举的属性

     console.log(Object.keys(obj));
     // [ 'prop_this' ]
    
  5. Reflect.ownKeys(obj)可以获取自身所有的属性

     console.log(Reflect.ownKeys(obj));
     // [ 'prop_this', 'prop_dontEnum', Symbol(prop_symbol) ]
    
posted @ 2017-12-19 22:52  日含  阅读(240)  评论(0编辑  收藏  举报