扫码关注官方订阅号
都是遍历,那有什么区别呢、?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
以下两个输出结果是相通的
for (var key in arr){ console.log(arr[key]); } for (var value of arr){ console.log(value); }
简单说,for in是遍历键名,for of是遍历键值。例如:
let arr = ["a","b"]; for (a in arr) { console.log(a);//1,2 } for (a of arr) { console.log(a);//a,b }
由于for of的这个特性,他还可以实现对iterator对象的遍历,而for in就是简单的遍历了。
个人理解。for in是循环遍历对象;for of语法和for in语法很像,但它的功能却丰富的多,它能循环很多东西。推荐使用for of
for in
for of
for-of是ES6引进的新语法,for-in循环是遍历对象的属性,for-of循环是遍历实现iterator接口的成员。可以参考阮一峰大神的es6入门里的Iterator和for...of循环。
参考MDN MDN关于for of的解释for...of语句在可迭代对象(包括 Array, Map, Set, String, TypedArray,arguments 对象等等)上创建一个迭代循环,对每个不同属性的属性值,调用一个自定义的有执行语句的迭代挂钩.也就是说,for of只可以循环可迭代对象的可迭代属性,不可迭代属性在循环中被忽略了。并且给与了一个对比的例子
Object.prototype.objCustom = function () {}; Array.prototype.arrCustom = function () {}; let iterable = [3, 5, 7]; iterable.foo = "hello"; for (let i in iterable) { console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom" } for (let i of iterable) { console.log(i); // logs 3, 5, 7 }
我们可以看到,对于array的不可迭代元属性objCustom、arrCustom和实例属性foo,在循环中都被忽略这是for in迭代KEY,for of迭代value之外最大的区别
for of是ES6的标准
这种问题,我推荐去看下规范,MDN 的就不错
for in是ES5标准,for of是ES6标准;for in是遍历对象属性,for of是遍历对象元素。for of兼容性还不够,移动端安卓微信浏览器貌似不支持,苹果的可以;web端IE支持也不够,chrome可以。
for in遍厉数组无法保证输出值的顺序,而for of可以保证输出顺序,这个是本质也是最大的差别,es6后建议使用for of会避免许多小的不必要错误,之前的for in最好用于遍厉对象,因为对象是无序的
请类比Java中对List(的元素)和Map(的Key)的遍历。
List
Map
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
以下两个输出结果是相通的
简单说,for in是遍历键名,for of是遍历键值。
例如:
由于for of的这个特性,他还可以实现对iterator对象的遍历,而for in就是简单的遍历了。
个人理解。
for in是循环遍历对象;for of语法和for in语法很像,但它的功能却丰富的多,它能循环很多东西。推荐使用for offor-of是ES6引进的新语法,for-in循环是遍历对象的属性,for-of循环是遍历实现iterator接口的成员。可以参考阮一峰大神的es6入门里的Iterator和for...of循环。
参考MDN MDN关于for of的解释
for...of语句在可迭代对象(包括 Array, Map, Set, String, TypedArray,arguments 对象等等)上创建一个迭代循环,对每个不同属性的属性值,调用一个自定义的有执行语句的迭代挂钩.
也就是说,for of只可以循环可迭代对象的可迭代属性,不可迭代属性在循环中被忽略了。
并且给与了一个对比的例子
我们可以看到,对于array的不可迭代元属性objCustom、arrCustom和实例属性foo,在循环中都被忽略
这是for in迭代KEY,for of迭代value之外最大的区别
for of是ES6的标准
这种问题,我推荐去看下规范,MDN 的就不错
for in是ES5标准,for of是ES6标准;for in是遍历对象属性,for of是遍历对象元素。for of兼容性还不够,移动端安卓微信浏览器貌似不支持,苹果的可以;web端IE支持也不够,chrome可以。
for in遍厉数组无法保证输出值的顺序,而for of可以保证输出顺序,这个是本质也是最大的差别,es6后建议使用for of会避免许多小的不必要错误,之前的for in最好用于遍厉对象,因为对象是无序的
请类比Java中对
List(的元素)和Map(的Key)的遍历。