5种js遍历对象属性的方法

JavaScript016

5种js遍历对象属性的方法,第1张

ES6 一共有 5 种方法可以遍历对象的属性。

(1)for...in

for...in 循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

(2)Object.keys(obj) ie9

Object.keys 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

(3)Object.getOwnPropertyNames(obj) ie9

Object.getOwnPropertyNames 返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

(4)Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols 返回一个数组,包含对象自身的所有 Symbol 属性的键名。

(5)Reflect.ownKeys(obj)

Reflect.ownKeys 返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。

​ 其中兼容性最好的是for... in来进行遍历,因为我们通常只需要遍历对象自身拥有的属性 所以使用 Object.prototype.hasOwnProperty() 兼容到ie5.5 方法来排除继承的属性

注意:即使属性的值是 null 或 undefined ,只要属性存在, hasOwnProperty 依旧会返回 true 。

​ 如果不在意兼容性问题,用keys方法,搭配for... of来遍历也不错,、

​ for...of是es6引入的用于遍历可迭代对象的语法,相当于python里的for in。

​ js的for...in别扭的地方在于,遍历数组和对象都是返回的key值,遍历数组是下标值。for...of遍历数组会返回每一个值,跟foreach类似的效果,但是对于对象,只支持实现了迭代器的对象。

具体代码如下所示:

1、<script>  //----------------for用来遍历数组对象;

2、 var i,myArr = [1,2,3]  for (var i = 0i <myArr.lengthi++) {    console.log(i+":"+myArr[i])  }

3、 //---------for-in 用来遍历非数组对象   var man ={hands:2,legs:2,heads:1}  //为所有的对象添加clone方法,即给内置原型(object,Array,function)增加原型属性,该方法很强大,也很危险   if(typeof Object.prototype.clone ==="undefined"){    Object.prototype.clone = function(){}   } ;

4、  //   for(var i in man){    if (man.hasOwnProperty(i)) { //filter,只输出man的私有属性     console.log(i,":",man[i])   }  }  ;

5、//输出结果为print hands:2,legs:2,heads:1   for(var i in man) {//不使用过滤    console.log(i,":",man[i])  }   ;

6、 //输出结果为://hands : 2 index.html:20   //legs : 2 index.html:20   //heads : 1 index.html:20   //clone : function ;

7、for(var i in man) {    if(Object.prototype.hasOwnProperty.call(man,i)) { //过滤     console.log(i,":",man[i])   }   };

8、 //输出结果为print hands:2,legs:2,heads:1 </script>   。

javaScript遍历对象总结:

1、

2、