加性操作符
加性操作符,即加法和减法操作符。 在 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