JavaScript基本数据类型转换无全局优先级表,而是依运算符上下文分路径执行:加法(+)优先字符串拼接,其余运算符强制ToNumber,对象需先通过[[ToPrimitive]]降级,基础值有固定映射规则。

JavaScript 中基本数据类型转换没有统一的“全局优先级表”,而是按上下文(运算符或语境)分路径执行,不同场景触发不同转换逻辑。理解关键不在背顺序,而在识别「谁主导转换」——是运算符说了算,不是操作数。
加法(+):字符串拼接有绝对优先权
只要任一操作数是字符串,整个表达式立刻走字符串路径,其余操作数全部调用 ToString:
-
"1" + 2→"12"(2 转成"2") -
true + "x"→"truex"(true→"true") -
1 + 2 + "3"是左结合:(1 + 2) + "3"→3 + "3"→"33"
减、乘、除、取余(− * / %):只认数字,不妥协
这些运算符不支持拼接,强制所有操作数走 ToNumber 流程,失败即得 NaN,绝不回退:
-
"6" - "2"→4(两边成功转数字) -
null - 1→-1(null固定映射为0) -
undefined * 2→NaN(undefined→NaN) -
"abc" / 2→NaN(无法解析,直接失败)
对象参与运算:必须先降级,再看 hint
对象不能直接算,必须先通过 [[ToPrimitive]] 获取原始值,hint 决定方法调用顺序:
立即学习“Java免费学习笔记(深入)”;
- 数学运算(如
-、*)默认hint: "number":先valueOf(),失败再toString() - 字符串拼接(
+遇字符串)默认hint: "string":先toString(),失败再valueOf() -
[1] + [2]→"12"(数组toString()得"1"和"2") -
{} - []→NaN({}的valueOf()返回自身,toString()得"[object Object]",ToNumber失败)
基础值的固定映射:无需解析,直出结果
部分原始值在 ToNumber 中有确定输出,不依赖字符串解析:
-
true→1,false→0 -
null→0,undefined→NaN -
""或仅空白("\t\n ")→0 -
"123"→123," 45 "→45


















