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

JavaScript中Number原型方法调用includes返回结果不符合预期如何解决?

问题根因

JavaScript 中调用原始数字类型的原型方法时,会自动对原始值做装箱操作,把原始值转为Number包装对象:

  • inList方法内拿到的this是new Number(0)的实例对象,不是你预期的原始值0
  • 数组includes方法基于SameValueZero规则做相等判断,包装对象和原始数字属于不同类型,永远不会相等,因此返回false
  • 直接调用[0,1].includes(value)时传入的是原始值0,符合匹配规则,因此返回true
修复方案

在判断前把this转换回原始数字值即可,推荐两种写法:

  • 调用valueOf()显式取原始值
Number.prototype.inList = function (list) {
  return list.includes(this.valueOf());
}
  • 用一元加运算符隐式转原始值
Number.prototype.inList = function (list) {
  return list.includes(+this);
}

修改后重新运行代码,find1和find2都会返回true。

注意事项

String、Boolean等其他原始类型调用原型方法时也会触发装箱逻辑,如果需要基于原始值做判断,都需要先把this转为对应的原始值再操作。

内容的提问来源于stack exchange,提问作者A.Baudouin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:54:09