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

为什么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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 03:51:03