Skip to main content

加性操作符

加性操作符,即加法减法操作符。 在 ECMAScript中,这两个操作符拥有一些特殊的行为。

乘性操作符类似,加性操作符在后台会发生不同数据类型的转换

加法操作符

加法操作符(+) 用于求两个数的和, 比如:

let result = 1 + 2;

如果两个操作数都是数值,加法操作符执行加法运算并根据规则返回如下结果:

  • 如果有任一操作数是 NaN, 则返回 NaN;
  • 如果是 InfinityInfinity, 则返回 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;

  • 如果是 InfinityInfinity, 则返回 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