You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么下述JavaScript代码会进入无限循环而不抛出错误?

你提供的代码如下:

const loopFn = function(num) {
  for(let a = 0; a < num || 10; a++) { 
    console.log(a)
  }
}

let b = loopFn(8)
console.log(b)
问题原因解析

1. 核心是运算符优先级差异

JavaScript中小于运算符<的优先级高于逻辑或运算符||,所以你写的a < num || 10会被JS引擎按照(a < num) || 10的顺序执行,而不是你预期的a < (num || 10)。

2. 逻辑或的返回值规则

逻辑或||的运算规则是:

  • 先计算左侧表达式的布尔值,如果为true,就返回左侧表达式的值
  • 如果左侧表达式布尔值为false,直接返回右侧表达式的值
    在JS中所有非0数字的布尔值都是true,这里||右侧的10永远是真值。

3. 循环条件的执行过程

你传入的num为8,循环运行流程如下:

  • 当a从0到7时:a < 8结果为true,整个条件返回true,循环继续
  • 当a自增到8时:a < 8结果为false,||返回右侧的10,转布尔值为true,循环条件依然成立
  • 后续a无论增长到多大,a < 8永远为false,||永远返回10,永远为真值,循环永远不会终止,就出现了无限循环。

4. 为什么不会抛出错误

JS语法允许for循环的条件部分返回任意类型的值,执行时会自动隐式转为布尔值判断,你写的表达式完全符合JS语法规范,不存在语法错误,自然不会抛出错误。

内容的提问来源于stack exchange,提问作者user16983447

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:54:03