加性操作符
加性操作符
,即加法
和减法
操作符。 在 ECMAScript中,这两个操作符拥有一些特殊的行为。
与乘性操作符
类似,加性操作符
在后台会发生不同数据类型的转换
加法操作符
加法操作符(+)
用于求两个数的和, 比如:
let result = 1 + 2;
如果两个操作数都是数值,加法操作符执行加法运算并根据规则返回如下结果:
- 如果有任一操作数是
NaN
, 则返回NaN
; - 如果是
Infinity
加Infinity
, 则返回Infinity
; - 如果是
-Infinity
加-Infinity
, 则返回-Infinity
; - 如果是
Infinity
加-Infinity
, 则返回NaN
; - 如果是
+0
加+0
, 则返回+0
; - 如果是
-0
加+0
, 则返回+0
; - 如果是
-0
加-0
, 则返回-0
;
不过,如果有一个操作数是字符串,则要应用如下规则:
- 如果两个操作数都是字符串,则将第二个字符串拼接到第一个字符串后面;
- 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,再将两个字符串拼接在一起,
- 如果任一操作数是
布尔值
,null
,undefined
,则先在后台使用Number()
将其转换为数值。然后在根据前面的规则进行数学运算。 - 如果任一操作数是一个对象,则调用
valueOf()
方法 如果返回的是一个原始值(比如数字)并按照上述规则转换返回的值。 如果valueOf()
方法返回的仍然是 一个对象 则调用toString()
方法 在按照字符串的规则转换
let result = 5 + 5;
console.log(result); //10;
let result = 5 + "5";
console.log(result); //'55';
以上代码展示了加法操作符的两种运算符。正常清情况下,5 + 5 = 10
。
但是如果将一个操作数改为字符串,比如“5”
,则相加的结果就变成了“55”
。
let num1 = 5;
let num2 = 10;
let message = "The sum of 5 and 10 is" + num1 + num2;
console.log(message); //The sum of 5 and 10 is 510
这里 变量 message 保存的是一个字符串,只执行两次加法操作的之后的结果。
每次加法操作都是独立完成的,第一次加法的操作是一个字符串和一个数值 5
。第二次加法的操作是一个字符串和一个数值 10
。
let num1 = 5;
let num2 = 10;
let message = "The sum of 5 and 10 is" + (num1 + num2);
console.log(message); //The sum of 5 and 10 is 15
我们可以用括号把两个数值变量括了起来,意思是让解释器先执行两个数值的加法,然后再把结果和追加给字符串。
减法操作符
减法操作符(-)
也是使用很频繁的一种操作符,比如:
let result = 2 - 1;
与加法操作符一样
,减法操作符
也有一组规则用于处理ECMAScript
中不同类型之间的转换。
-
如果有任一操作数是
NaN
, 则返回NaN
; -
如果是
Infinity
减Infinity
, 则返回NaN
; -
如果是
-Infinity
减-Infinity
, 则返回NaN
; -
如果是
Infinity
减-Infinity
, 则返回Infinity
; -
如果是
+0
减+0
, 则返回+0
; -
如果是
-0
加+0
, 则返回-0
; -
如果是
-0
加-0
, 则返回+0
; -
如果任一操作数是
字符串
,布尔值
,null
,undefined
则先在后台使用Number()
将其转换为数值。然后在根据前面的规则进行数学运算。 -
如果任一操作数是一个对象,则调用
valueOf()
方法 如果返回的是一个原始值(比如数字)并按照上述规则转换返回的值。 如果valueOf()
方法返回的仍然是一个对象 则调用toString()
方法 在按照字符串的规则转换
以下示例演示了上面的规则:
let result1 = 5 - true; // true被转换为1,所以结果是4
let result2 = NaN - 1; // NaN
let result3 = 5 - 3;
let result4 = 5 - ""; // 5
let result5 = 5 - "2"; // 3
let result6 = 5 - null; //5