JS中的+操作符
说明: 二元操作符+
用于计算数值操作数的和 或者 拼接字符串操作数
1 + 2 // => 3
"hello" + "world" // => "hello world"
"1" + 2 // => "12"
如果两个操作数都是数值或都是字符串, +
操作符执行后的结果自不必说. 但除开这两种情况之外的任何情况, 都会涉及到类型转换, 而实际执行的操作取决于类型转换的结果. +
操作符优先字符串拼接 : 只要有操作数是字符串或者是可以转换为字符串的对象, 另一个操作数也会被转换为字符串并执行拼接操作
只有任何操作数都不是字符串或者类字符串值时,才会执行加法操作
只有任何操作数都不是字符串或者类字符串值时,才会执行加法操作
只有任何操作数都不是字符串或者类字符串值时,才会执行加法操作
严格来讲, +
操作符的行为满足以下条件
- 如果一个操作数是对象,
Date
对象使用toString()
方法来转换, 其他所有对象通过valueOf()
转换(如果这个对象返回原始值). 不过,多数对象没有valueOf()
方法, 因此它们也会通过toString()
方法转换 - 完成对象到原始值的转换后, 如果有操作数是字符串, 另一个操作数也会被转换为字符串进行拼接
- 只有当两个操作数都被转换为数值(或
NaN
), 才会计算加法
例子来啦
1 + 2 // => 3 :加法
"1" + "2" // => "12" : 拼接
"1" + 2 // => "12" :数值转换为字符串之后再进行拼接
1 + {} // => "1[object Object]": 对象转换为字符串后再进行拼接
true + true // => 2 :布尔值转换为数值后计算加法
2 + null // => null :转换为 0 后 计算加法
2 + undefined // => NaN : undefined 转换为 NaN 后计算加法
注意 +
操作符在用于字符串和数值时, 结果取决于操作执行的顺序
1 + 2 + " hello world" // => "3 hello world"
1 + (2 + " hello world") // => "12 hello world"