为什么JavaScript的if语句用'='返回undefined,用'==='却正常?
JavaScript if判断中赋值运算符与相等运算符的差异说明
核心问题原因
- 你遇到的返回undefined问题,本质是混淆了
赋值运算符=和严格相等运算符===的定位:=是赋值操作,执行时会先修改左侧变量的值,整个表达式的返回值就是你赋的数值。如果写if(counter = 0),首先会把counter重置为0,再判断0的布尔值——JS中0属于假值,所以if内部的代码永远不会执行,result一直是初始的undefined,自然返回不符合预期。===是严格相等判断,只会比对左右两侧的值和类型是否完全一致,返回布尔值true/false,不会修改原有变量的值。你当前代码中的if(counter === 0)逻辑就是正确的:第一次调用时counter为0,判断为true,执行回调赋值给result、counter自增,后续调用时counter为1判断为false,直接返回已存储的result,实现回调只执行一次的需求。
可正常运行的参考代码
function once(callback) { let counter = 0; let result; function sum(x) { if (counter === 0) { result = callback(x); counter++; } return result; } return sum; } const addByTwoOnce = once(function(num) { return num + 2; }); // 测试代码 console.log(addByTwoOnce(5)); //输出7 console.log(addByTwoOnce(10)); //输出7 console.log(addByTwoOnce(9001)); //输出7
额外注意
这个场景下用非严格相等==也能运行,但更推荐统一使用===,避免JS隐式类型转换带来的不可预期错误。
内容的提问来源于stack exchange,提问作者kay
相关产品推荐
相关产品推荐

