我
你使用什么语句遍历对象的属性和数组的元素?
难度:
对象:
for
循环:for (var property in obj) { console.log(property); }
。但是,这还会遍历到它的继承属性,在使用之前,你需要加入obj.hasOwnProperty(property)
检查。Object.keys()
:Object.keys(obj).forEach(function (property) { ... })
。Object.keys()
方法会返回一个由一个给定对象的自身可枚举属性组成的数组。Object.getOwnPropertyNames()
:Object.getOwnPropertyNames(obj).forEach(function (property) { ... })
。Object.getOwnPropertyNames()
方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括 Symbol 值作为名称的属性)组成的数组。
数组:
for
loops:for (var i = 0; i < arr.length; i++)
。这里的常见错误是var
是函数作用域而不是块级作用域,大多数时候你想要迭代变量在块级作用域中。ES2015 引入了具有块级作用域的let
,建议使用它。所以就变成了:for (let i = 0; i < arr.length; i++)
。forEach
:arr.forEach(function (el, index) { ... })
。这个语句结构有时会更精简,因为如果你所需要的只是数组元素,你不必使用index
。还有every
和some
方法可以让你提前终止遍历。
大多数情况下,我更喜欢.forEach
方法,但这取决于你想要做什么。for
循环有更强的灵活性,比如使用break
提前终止循环,或者递增步数大于一。