为何`array[i] < min && min = array[i];`不符合JavaScript语法?
问题解答
你的问题根源不是真的缺少分号,而是VS Code内置的代码检查工具(或ESLint这类插件)的规则限制,把逻辑表达式中的赋值操作误报成了“需要分号”。
具体原因:
- 你写的
array[i] < min && min = array[i];在语法上是合法的,逻辑上等价于if (array[i] < min) min = array[i];,但&&作为逻辑运算符,它的右侧通常应该是一个纯表达式,而赋值语句在这里很容易被误写成比较运算符==(比如手滑少打一个等号)。为了避免这种低级错误,代码检查工具会把这种“在逻辑表达式中使用赋值”的写法标记为问题,只是提示信息被翻译成了“需要分号”,属于提示不准确。 - 换成if语句后,赋值操作是在代码块中明确执行的语句,不是逻辑表达式的一部分,自然不会触发这个检查规则,所以就没有报错。
额外提示:
你的代码还有一个逻辑漏洞:初始时把min和max设为0,如果传入的数组全是正数,min会一直是0(永远不会被更小的正数替换);如果数组全是负数,max会一直是0。正确的初始化方式应该用数组的第一个元素:
function minMax(array) { // 先判断数组非空 if (!array.length) return { min: undefined, max: undefined }; let min = array[0]; let max = array[0]; for (let i = 1; i < array.length; i++) { // 从第二个元素开始遍历即可 if (array[i] < min) min = array[i]; if (array[i] > max) max = array[i]; } return { min, max }; // 别忘了返回结果 }
内容的提问来源于stack exchange,提问作者Zhixia Guo
相关产品推荐
相关产品推荐

