js的for in循环和java里的foreach循环的区别

本文详细解释了JavaScript中for-in循环的工作原理,并通过实例对比了其与Java中foreach循环的区别。重点介绍了如何使用for-in循环遍历对象和数组。

  449人阅读  评论(0)  收藏  举报

    js里的for in循环定义如下:

    for(var variable in obj) { ... }

    obj可以是一个普通的js对象或者一个数组。如果obj是js对象,那么variable在遍历中得到的是对象的属性的名字,而不是属性对应的值。如果obj是数组,那么variable在遍历中得到的是数组的下标。

    遍历对象实验:

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. var v = {};  
  2. v.field1 = "a";  
  3. v.field2 = "b";  
  4. for(var v in v) {  
  5.     console.log(v);  
  6. }  
  7.   
  8. 控制台下输出:  
  9. field1   
  10. field2   
    遍历数组实验:

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. var mycars = new Array()  
  2. mycars[0] = "Saab"  
  3. mycars[1] = "Volvo"  
  4. mycars[2] = "BMW"  
  5.   
  6. for (var x in mycars){  
  7.   console.log(x);  
  8. }  
  9.   
  10. 控制台输出:  
  11. 0   
  12. 1  
  13. 2   
    拿java的foreach循环来做对比,有两大差别。首先java的foreach循环不会去枚举一个java对象的属性。其次,java的foreach循环枚举一个数组或者任何实现了Iterable接口的对象的时候,for(Object o : list), 对象o得到的是list一个元素,而非在列表中的下标。

    java的遍历代码就不贴出来了。经常写后台代码,foreach循环很熟悉。写前台js代码的时候,难免会套用java的语法,所以第一次用js的for in循环的时候犯错了。这次总结清楚,以后就不会犯错误了。

在不同编程语言中,`foreach`、`for of`、`for in` `for` 循环各有特点,并且在使用 `break` `continue` 语句上也存在差异。 ### 循环区别 - **`for` 循环**:需要明确遍历次数,不能遍历对象,但可以遍历对象以外的集合,如数组、伪数组。它是命令式编程,注重过程的管控,适合过程复杂、不能满足特定条件的情况 [^4][^5]。 - **`forEach` 循环**:可以遍历对象以外的集合,如数组、`Set`。它是函数式编程,注重最后的结果,使用起来较为简便,当不知道数组长度时可优先选择。不过在 Java 8 中,之前普通 `for` 循环能使用的跳出关键字在 `forEach()` 循环中不能使用;在 JavaScript ,`forEach` 无法使用 `break` 或 `continue`,也不能获取索引值返回结果 [^1][^2][^4][^5]。 - **`for...in` 循环**:适用于遍历对象的属性,也可以遍历数组的索引。但它不能直接访问对象的属性值 [^2][^4]。 - **`for...of` 循环**:是 ES6 新增的循环方式,可用于部署了 `Symbol.iterator` 的对象,大部分原生的数据集合都能使用,但自定义的对象通常不能使用。它遍历的是对象的值 [^2][^4]。 ### `break` `continue` 语句使用情况 - **可使用的循环**:`for` 循环、`for...in` 循环 `for...of` 循环都可以使用 `break` `continue` 语句。`break` 用于跳出整个循环,`continue` 用于跳过当前循环的剩余部分,直接进入下一次循环 [^2][^4]。 - **不可使用的循环**:`forEach` 循环通常不能直接使用 `break` `continue` 语句。不过在 Kotlin 中,可以通过 `Label` 来模拟 `break` `continue` 的效果 [^2][^3]。 以下是 JavaScript 中各循环的使用示例: ```javascript // for 循环 const arr = [1, 2, 3, 4, 5]; for (let i = 0; i < arr.length; i++) { if (arr[i] === 3) { continue; // 跳过 3 } console.log(arr[i]); } // forEach 循环 arr.forEach((element) => { // 不能使用 break 或 continue console.log(element); }); // for...in 循环 const obj = { a: 1, b: 2, c: 3 }; for (const key in obj) { if (key === 'b') { continue; // 跳过 b } console.log(obj[key]); } // for...of 循环 for (const element of arr) { if (element === 4) { break; // 遇到 4 跳出循环 } console.log(element); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值