Get to know MDN better
加法运算符(+)为两种不同的运算重载:数字加法和字符串连接。在求值时,它首先将两个操作数强制转换为基本类型。然后,检查两个操作数的类型:
字符串连接经常被认为等价于模板字符串或者 String.prototype.concat(),但并非如此。加法强制将表达式转为基本类型,它优先调用 valueOf();另一方面,模板字符串和 concat() 则强制将表达式转为字符串,它们优先调用 toString()。如果表达式有 [Symbol.toPrimitive]() 方法,字符串连接时会用 "default" 作为 hint 调用它,然而模板字符串则用 "string"。这对于具有不同的字符串和原始值表现的对象来说很重要——例如 Temporal,它的 valueOf() 方法会抛出错误。
建议不要使用 "" + x 来执行字符串强制转换。
| ECMAScript® 2027 Language Specification # sec-addition-operator-plus |
启用 JavaScript 以查看此浏览器兼容性表。