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中,这两个操作符拥有一些特殊的行为。与乘性操作符类似,加性操作符在后台会发生不同数据类型的转换。只不过对这两个操作符来说,转换规则不是那么直观。

  1. 加法操作符( + )

    用于求两个数的和。

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

    • 如果有任一操作数是 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" 。

  2. 减法操作符( - )

    减法操作符也有一组规则用于处理 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
    

学习下一篇文章

上一篇下一篇

猜你喜欢

热点阅读