前言
JavaScript 的加法和级联(concatenation)都使用 + 运算符。
语法
加法操作符(+)针对特殊值也有一些特殊的行为:
- 如果有任一操作数是NaN,则返回NaN。
- 如果是Infinity加Infinity,则返回Infinity。
- 如果是-Infinity加-Infinity,则返回-Infinity。
- 如果Infinity加-Infinity,则返回NaN。
- +0加+0,则返回+0。
- -0加+0,则返回+0。
- -0加-0,则返回-0。
- 如果有一个操作数是字符串
(1)如果两个操作数都是字符串,则将第二个字符串拼接到第一个字符串后面。
(2)如果只有一个操作数是字符串,则将另一个操作数转换成为字符串,再将两个字符串拼接在一起。 - 如果有任一操作数是对象、数值或布尔值,则调用他们的toSting()方法以获取字符串,然后在应用前面的关于字符串的规则。对于undefined和null,则调用String()函数,分别获取"undefined"和"null"。
let num1 = 5;
let num2 = 10;
let message = "The sum of 5 and 10 is " + num1 + num2; // "The sum of 5 and 10 is 510"
let message = "The sum of 5 and 10 is " + (num1 + num2); // "The sum of 5 and 10 is 15"
解惑
如何判断加法还是级联?
对 两个数字 用加法运算。对 两个字符串 或者 一个字符串加一个数字 用级联运算。
加法和级联是怎么处理数据的?
在所有数字运算中,JavaScript 会尝试将各种数据类型转换为数字:Number()
在字符串级联运算中,JavaScript 会尝试将各种数据类型转换为字符串:toString() 或者 String()(对于 undefined 和 null)