3.5.5 指数操作符、3.5.6 加性操作符
2021-03-31 本文已影响0人
Wuthier
3.5.5 指数操作符
ECMAScript 7新增了指数操作符, Math.pow() 现在有了自己的操作符 ** ,结果是一样的:
console.log(Math.pow(3, 2); // 9
console.log(3 ** 2); // 9
console.log(Math.pow(16, 0.5); // 4
console.log(16** 0.5); // 4
指数操作符也有自己的指数赋值操作符 **= ,该操作符执行指数运算和结果的赋值操作:
let squared = 3;
squared **= 2;
console.log(squared); // 9
let sqrt = 16;
sqrt **= 0.5;
console.log(sqrt); // 4
3.5.6 加性操作符
加性操作符,即加法和减法操作符,一般都是编程语言中最简单的操作符。
不过,在 ECMAScript中,这两个操作符拥有一些特殊的行为。与乘性操作符类似,加性操作符在后台会发生不同数据类型的转换。只不过对这两个操作符来说,转换规则不是那么直观。
-
加法操作符( + )
用于求两个数的和。
如果两个操作数都是数值,加法操作符执行加法运算并根据如下规则返回结果:
- 如果有任一操作数是 NaN ,则返回 NaN ;
- 如果是 Infinity 加 Infinity ,则返回 Infinity ;
- 如果是 -Infinity 加 -Infinity ,则返回 -Infinity ;
- 如果是 Infinity 加 -Infinity ,则返回 NaN ;
- 如果是 +0 加 +0 ,则返回 +0 ;
- 如果是 -0 加 +0 ,则返回 +0 ;
- 如果是 -0 加 -0 ,则返回 -0 。
如果有一个操作数是字符串,则要应用如下规则:
- 如果两个操作数都是字符串,则将第二个字符串拼接到第一个字符串后面;
- 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,再将两个字符串拼接在一起。
如果有任一操作数是对象、数值或布尔值,则调用它们的 toString() 方法以获取字符串,然后再应用前面的关于字符串的规则。对于 undefined 和 null ,则调用 String() 函数,分别获取"undefined" 和 "null" 。
-
减法操作符( - )
减法操作符也有一组规则用于处理 ECMAScript 中不同类型之间的转换:
- 如果两个操作数都是数值,则执行数学减法运算并返回结果。
- 如果有任一操作数是 NaN ,则返回 NaN 。
- 如果是 Infinity 减 Infinity ,则返回 NaN 。
- 如果是 -Infinity 减 -Infinity ,则返回 NaN 。
- 如果是 Infinity 减 -Infinity ,则返回 Infinity 。
- 如果是 -Infinity 减 Infinity ,则返回 -Infinity 。
- 如果是 +0 减 +0 ,则返回 +0 。
- 如果是 +0 减 -0 ,则返回 -0 。
- 如果是 -0 减 -0 ,则返回 +0 。
- 如果有任一操作数是字符串、布尔值、 null 或 undefined ,则先在后台使用 Number() 将其转换为数值,然后再根据前面的规则执行数学运算。如果转换结果是 NaN ,则减法计算的结果是NaN 。
- 如果有任一操作数是对象,则调用其 valueOf() 方法取得表示它的数值。如果该值是 NaN ,则减法计算的结果是 NaN 。如果对象没有 valueOf() 方法,则调用其 toString() 方法,然后再将得到的字符串转换为数值。
let result1 = 5 - true; // true 被转换为 1,所以结果是 4 let result2 = NaN - 1; // NaN let result3 = 5 - 3; // 2 let result4 = 5 - ""; // ""被转换为 0,所以结果是 5 let result5 = 5 - "2"; // "2"被转换为 2,所以结果是 3 let result6 = 5 - null; // null 被转换为 0,所以结果是 5