欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 重学前端之认识 JavaScript 中的一元操作符和二元操作符

重学前端之认识 JavaScript 中的一元操作符和二元操作符

2024/10/24 13:58:49 来源:https://blog.csdn.net/qq_24956515/article/details/143202262  浏览:    关键词:重学前端之认识 JavaScript 中的一元操作符和二元操作符

一、一元操作符

操作符可以根据他们期待的操作符个数来分类,多数的 JavaScript 操作符都是二元操作符,二元操作符可以将两个表达式合成一个更复杂的表达式。JavaScript 也支持一元操作符,这些操作符可以将一个表达式转化为另一个更复杂的表达式。同时,JavaScript 中也有一个三元操作符,就是条件操作符(?:),它用于将三个表达式组成一个表达式。下面就先来看看一元操作符。

一元操作符具有以下特点:

  • 最简单的操作符,用来操作一个表达式;

  • 具有高优先级和右结合性;

  • 在必要时将操作数自动转化为数值。

1. 递增和递减操作符(++ --)

递增操作符顾名思义就是递增其操作数,递减操作符就是递减其操作数。它们都有两个版本:

  • 前缀版(++i):操作符位于变量的前面,表示先递增(递减),后执行语句;

  • 后缀版(i++):操作符位于变量的后面,表示先执行语句,后递增(递减);

简单看两个例子:

// 前置递增操作符:
let num1 = 1, num2 = 2;
console.log(++num1 + num2) // 4// 后置递增操作符:
let num1 = 1, num2 = 2;
console.log(num1++ + num2) // 3

fileOf7174.png

可以看到,两种类型的结果是不一样的,原因就在于后置递增递减操作是在包含它们的语句被求值之后才执行的。

这四个操作符可以作用于任何类型的数据。对于这些类型,JavaScript 会将他们转化为数值,再在这个数值上进行加一或减一操作。如果不能转化为一个数字,那么递增或递减的结果就是 NaN:

let str = "hello";
console.log(str++)  // NaN

fileOf7174.png

递增和递减操作符主要用于 for 循环中控制计算器递增或递减。

2. 加和减操作符

加和减操作符既是一元操作符,也是二元操作符。这里我们先来看一元加和减操作符。

(1)一元加运算符(+)

一元加操作符会将其操作数转化为数值,并返回转化后的值。需要注意:

  • 如果操作数是数值,那它什么都不做;

  • 如果操作数不能转化为数值,那么会返回 NaN;

  • 由于 BigInt 值不能转化为数值,因此这个操作符不能用于 BigInt。

let a = -1;
let b = "hello";
let c = BigInt;
console.log(+a)  // -1
console.log(+b)  // NaN
console.log(+c)  // NaN

fileOf7174.png

(2)一元减运算符(-)

一元减操作符和一元加操作符类似,会先将操作数转化为数值,然后会改变结果的符号:

let a = -1;
let b = 2;
console.log(-a)  // 1
console.log(-b)  // -2

fileOf7174.png

一元加和减操作符主要用于基本的算术运算,也可以用于数据类型的转换,将不同类型的数据转化为数字类型,像 Number()方法一样。

二、加减乘除操作符

1. 加法操作符(+)

这里说的加法操作符就是二元的加操作符了。二元加操作符用于计算数值操作或者拼接字符串操作

1 + 1             // 2
"1" + "2"         // "12"
"hello" + "world" // "helloworld"

在进行加操作时,如果两个操作数都是数值或者都是字符串,那么执行结果就分别是计算出来的数值和拼接好的字符串。除此之外,执行结果都取决于类型转化的结果:它会优先进行字符串拼接,只有操作数是字符串或者是可以转化为字符串的对象,另一个操作数也会被转化为字符串,并执行拼接操作。只有任何操作数都不是字符串时才会执行加法操作。

let a = 1 + 2             // 3
let b = "1" + "2"         // "12"
let c = "1" + 2           // "12"
let d = 1 + {}            // "1[object Object]"
let e = true + false      // 1  布尔值会先转为数字,再进行运算
let f = 1 + null          // 1 null会转化为0,再进行计算
let g = 1 + undefined     // NaN undefined转化为数字是NaNconsole.log(a)
console.log(b)
console.log(c)
console.log(d)
console.log(e)
console.log(f)
console.log(g)

fileOf7174.png

需要注意加操作的顺序:

let a = 1;
let b = 2;
let c = "hello" + a + b;  // "hello12"console.log(c)

fileOf7174.png

这里,由于每次加法操作都是独立完成的,第一次是字符串 hello 和数字 a 做加法操作,得到的结果是"hello1",第二次加法操作仍然是一个字符串加一个数字,所以最终结果是一个字符串。如果想让 a 和 b 两个数字相加,就需要加上括号。

除此之外,还需要注意以下特殊情况:

  • 如果有一个操作数是 NaN,则结果是 NaN;

  • 如果是 Infinity 加 Infinity,则结果是 Infinity;

  • 如果是-Infinity 加-Infinity,则结果是-Infinity;

  • 如果是 Infinity 加-Infinity,则结果是 NaN;

  • 如果是+0 加+0,则结果是+0;

  • 如果是-0 加-0,则结果是-0;

  • 如果是+0 加-0,则结果是+0。

2. 减法操作符(-)

减法操作和加法操作符类似, 但是减法操作符只能用于数值的计算,不能用于字符串的拼接。当进行减法操作时,如果两个操作数都是数值,就会直接进行减法操作,如果有一个操作数是非数值,就会将其转化为数值,再进行减法操作。如果转化结果为 NaN,则运算结果也是 NaN。

let a = 3 - 1      // 2
let b = 3 - true   // 2
let c = 3 - ""     // 3
let d = 3 - null   // 3
let e = NaN - 1    // NaNconsole.log(a)
console.log(b)
console.log(c)
console.log(d)
console.log(e)

fileOf7174.png

需要注意以下特殊情况:

  1. 如果是 Infinity 减 Infinity,则结果是 NaN;

  2. 如果是-Infinity 减-Infinity,则结果是 NaN;

  3. 如果是 Infinity 减-Infinity,则结果是 Infinity;

  4. 如果是-Infinity 减 Infinity,则结果是-Infinity;

  5. 如果是+0 减+0,则结果是+0;

  6. 如果是-0 减+0,则结果是-0;

  7. 如果是-0 减-0,则结果是+0。

3. 乘法操作符(*)

乘法操作符用于计算两个数的乘积。如果两个操作数都是数值,则会执行常规的乘法运算。如果不是数值,会将其转化为数值,在进行乘法操作。

需要注意以下特殊情况:

  • 如果有一个操作数是 NaN,则结果是 NaN;

  • 如果 Infinity 与 0 相乘,则结果是 NaN;

  • 如果 Infinity 与非 0 数值相乘,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;

  • 如果 Infinity 与 Infinity 相乘,则结果是 Infinity。

4. 除法操作符(/)

除法操作符用于计算一个操作数除以第二个操作数的商。如果两个操作数都是数值,则会执行常规的除法运算。如果不是数值,会将其转化为数值,在进行除法操作。

需要注意以下特殊情况:

  • 如果有一个操作数是 NaN,则结果是 NaN;

  • 如果 0 除以 0,则结果是 NaN;

  • 如果 Infinity 除以 Infinity,则结果是 Infinity。

  • 如果是非零的有限数被零除,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;

  • 如果是 Infinity 被任何非零数值除,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号。

5. 取余操作符(%)

取余操作符用于计算一个数除以第二个数的余数。计算规则和上述运算符类似。

需要注意以下特殊情况:

  • 如果被除数是无穷大值而除数是有限大的数值,则结果是 NaN;

  • 如果被除数是有限大的数值而除数是零,则结果是 NaN;

  • 如果是 Infinity 被 Infinity 除,则结果是 NaN;

  • 如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数;

  • 如果被除数是零,则结果是零。

6. 指数操作符(**)

在 ECMAScript 7 中新增了指数操作符(**),它的计算效果是 Math.pow()是一样的:

let a = Math.pow(2, 10);    // 1024
let b = 2 ** 10;            // 1024console.log(a)
console.log(b)

fileOf7174.png

指数运算符和上面的加减乘除运算符都有对应的赋值操作运算符:

let a = 2;
a **= 10;
console.log(a);   // 1024

fileOf7174.png

let d = 4;
a += 1;     // 2
b -= 2;     // 0
c *= 3;     // 9
d /= 4;     // 1
console.log(a)
console.log(b)
console.log(c)
console.log(d)

fileOf7174.png

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com