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

JavaScript对象强制转换为数字的规则及普通对象转换示例咨询

JavaScript普通对象转数字的转换逻辑及示例

普通对象(如{a: 1}这类没有自定义原始值转换规则的对象)转数字的执行逻辑遵循ES规范的ToPrimitive转换规则,具体步骤如下:

  • 当明确触发数字转换场景时,会优先调用对象的valueOf()方法:普通对象默认的valueOf()返回对象本身,不属于原始值,因此进入下一步。
  • 调用对象的toString()方法:普通对象默认的toString()返回字符串"[object Object]",属于原始值,进入下一步。
  • 将上一步得到的字符串转换为数字:"[object Object]"无法解析为有效数字,最终得到NaN。

基础示例

const obj = {a: 1};
// 显式转数字
console.log(Number(obj)); // NaN
// 算术运算隐式触发数字转换
console.log(obj * 10); // NaN
console.log(obj - 2); // NaN
console.log(+obj); // NaN

自定义转换规则示例

如果重写对象的valueOf或toString方法,转换结果会对应调整:

// 重写valueOf,返回原始值时会优先用该结果转数字
const customObj1 = {
  a: 10,
  valueOf() {
    return this.a;
  }
};
console.log(Number(customObj1)); // 10
console.log(customObj1 + 5); // 15

// valueOf返回非原始值时,会 fallback 到toString的结果
const customObj2 = {
  a: 10,
  valueOf() {
    return {}; // 非原始值,跳过
  },
  toString() {
    return "200";
  }
};
console.log(Number(customObj2)); // 200

异常场景示例

如果valueOf和toString都返回非原始值,会直接抛出类型错误:

const invalidObj = {
  valueOf() { return {} },
  toString() { return {} }
};
Number(invalidObj); // Uncaught TypeError: Cannot convert object to primitive value

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:06:00