javascript总for of和for in的区别?
高洛峰
高洛峰 2017-04-11 12:15:05
[JavaScript讨论组]

都是遍历,那有什么区别呢、?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(13)
PHP中文网

以下两个输出结果是相通的

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就是简单的遍历了。

PHP中文网

个人理解。for in是循环遍历对象;for of语法和for in语法很像,但它的功能却丰富的多,它能循环很多东西。推荐使用for of

ringa_lee

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 的就不错

PHPz

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)的遍历。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号