0
点赞
收藏
分享

微信扫一扫

05、JavaScript之操作符

whiteMu 2022-04-29 阅读 54
javascript

1、操作符

操作符描述了一组可以用于操作数据值的符号,主要包含数学操作符、位操作符、关系操作符、相等操作符等。

1、一元操作符

只操作一个值的操作符,被称为一元操作符。
操作符解释
++a将数值加1后进行运算,也就是先加1再进行下一步运算
a++先进行运算后再将数值加1 ,也就是先参加运算,再进行加1
- -a将数值减1后进行运算,也就是先减1再进行下一步运算
a- -先进行运算后再将数值减1 ,也就是先参加运算,再进行减1
a = +num将+号放在一个数的前面没有任何影响,表示一个正数
a= - num将减号放在一个数的前面表示该数是一个负数

【一元运算符规则】:

  • 对于字符串,如果该字符是有效的数值格式,则将其改变为数值后进行改变。也就是从字符串转为数值进行运算。
  • 对于字符串,如果不是有效的数值格式,则将变量的值设置为NaN,变量从字符串转变为数值。
  • 对于布尔类型,如果是false,则转变为0再进行运算。
  • 对于布尔类型,如果是true,则转变为1再进行运算
  • 对于浮点型,直接进行加1或减1操作
  • 如果是对象,则调用其valueOf()方法取得可以操作的值。对得到的值应用上述规则。
  • 如果是 NaN,则调用 toString()并再次应用其他规则。变量类型从对象变成数值。

【演示案例】:

let s1 = "2";
let s2 = "z";
let b = false;
let f = 1.1;
let o = {
 valueOf() {
 return -1;
 }
};
s1++; // 值变成数值 3
s2++; // 值变成 NaN
b++; // 值变成数值 1
f--; // 值变成 0.10000000000000009(因为浮点数不精确)
o--; // 值变成-2

2、位操作符

提示:看此部分内容的时候,如果大家对于数值在计算机中的存储方式不熟悉,建议先复习计算机组成原理中,数值的运算相关知识。

1、按位非

【表示形式】: ~(波浪符)

【作用】: 返回数值的补码并转为十进制数

【案例分析】:

let num1 = 25;    // 二进制 00000000000000000000000000011001
let num2 = ~num1; // 二进制 11111111111111111111111111100110
console.log(num2); // -26 

2、按位与

【表示形式】: a & b

【本质】: 按位与就是将两个数的每一个位对齐,然后基于真值表中的规则,对每一位执行相应的与操作。

【真值表】:
在这里插入图片描述
【案例分析】:

let result = 25 & 3;
console.log(result); // 1 
// 过程分析:
    //25 = 0000 0000 0000 0000 0000 0000 0001 1001
    // 3 = 0000 0000 0000 0000 0000 0000 0000 0011
    // --------------------------------------------
//按位与 = 0000 0000 0000 0000 0000 0000 0000 0001  
// 按位与结果转为十进制 = 1                                   

3、按位或

【表示形式】: a | b

【本质】: 按位与就是将两个数的每一个位对齐,然后基于真值表中的规则,对每一位执行相应的或操作。

【真值表】:
在这里插入图片描述
【案例分析】:

let result = 25 | 3;
console.log(result); // 27 
// 过程分析
// 25 = 0000 0000 0000 0000 0000 0000 0001 1001
//  3 = 0000 0000 0000 0000 0000 0000 0000 0011
//---------------------------------------------
// 或 = 0000 0000 0000 0000 0000 0000 0001 1011
// 结果转为十进制 :27

4、按位异或

【表示形式】: a ^ b

【真值表】:
在这里插入图片描述
【案例分析】:

let result = 25 ^ 3;
console.log(result); // 26 
// 过程分析:
//  25 = 0000 0000 0000 0000 0000 0000 0001 1001
//   3 = 0000 0000 0000 0000 0000 0000 0000 0011
//---------------------------------------------
//异或 = 0000 0000 0000 0000 0000 0000 0001 1010 
// 异或结果转为十进制 26

5、左移

【表示形式】: <<

【本质】: 将二进制数的位数按照指定的移动位数进行移动,移动过程中符号位保持不变。

【案例分析】:

let oldNum = 2; // 等于二进制 10
let newNum = oldNum << 5;  // 等于二进制 1000000,即十进制 64

【过程分析】:
在这里插入图片描述

6、有符号右移

【表示形式】: >>

【本质】: 将所有的位数都按照指定的移动位数移动,包含符号位。

【案例分析】:

let oldValue = 64; // 等于二进制 1000000
let newValue = oldValue >> 5; // 等于二进制 10,即十进制 2 

【过程分析】:
在这里插入图片描述

7、无符号右移

【表示形式】: >>>

【本质】: 会将数值的所有 32 位都向右移。对于正数,无符号右移与有符号右移结果相同。对于负数,有时候差异会非常大。

3、布尔操作符

1、逻辑非

【表现形式】:

**【作用】:**这个操作符始终返回布尔值,无论应用到的是什么数据类型。逻辑非操作符首先将操作数转换为布尔值,然后再对其取反。

【规则】:

  • 如果操作数是对象,则返回 false。
  • 如果操作数是空字符串,则返回 true。
  • 如果操作数是非空字符串,则返回 false。
  • 如果操作数是数值 0,则返回 true。
  • 如果操作数是非 0 数值(包括 Infinity),则返回 false。
  • 如果操作数是 null,则返回 true。
  • 如果操作数是 NaN,则返回 true。
  • 如果操作数是 undefined,则返回 true。

【案例演示】:

console.log(!false); // true
console.log(!"blue"); // false
console.log(!0); // true
console.log(!NaN); // true
console.log(!""); // true
console.log(!12345); // false

2、逻辑与

【表现形式】: &&

【真值表】:
在这里插入图片描述
【规则】:

  • 如果第一个操作数是对象,则返回第二个操作数。
  • 如果第二个操作数是对象,则只有第一个操作数求值为 true 才会返回该对象。
  • 如果两个操作数都是对象,则返回第二个操作数。
  • 如果有一个操作数是 null,则返回 null。
  • 如果有一个操作数是 NaN,则返回 NaN。
  • 如果有一个操作数是 undefined,则返回 undefined。

3、逻辑或

【表现形式】: ||

【真值表】:
在这里插入图片描述
【规则】:

  • 如果第一个操作数是对象,则返回第一个操作数。
  • 如果第一个操作数求值为 false,则返回第二个操作数。
  • 如果两个操作数都是对象,则返回第一个操作数。
  • 如果两个操作数都是 null,则返回 null。
  • 如果两个操作数都是 NaN,则返回 NaN。
  • 如果两个操作数都是 undefined,则返回 undefined

4、乘性操作符

1、乘法操作符

【表现形式】: *

【使用注意事项】:

  • 如果操作数都是数值,则执行常规的乘法运算。
  • 如果 ECMAScript 不能表示乘积,则返回 Infinity 或-Infinity。
  • 如果有任一操作数是 NaN,则返回 NaN。
  • 如果是 Infinity 乘以 0,则返回 NaN。
  • 如果是 Infinity 乘以非 0的有限数值,则根据第二个操作数的符号返回 Infinity 或-Infinity。
  • 如果是 Infinity 乘以 Infinity,则返回 Infinity。
  • 如果有不是数值的操作数,则先在后台用 Number()将其转换为数值,然后再应用上述规则

2、除法操作符

【表现形式】: /

【使用注意事项】:

  • 如果操作数都是数值,则执行常规的除法运算。
  • 如果有任一操作数是 NaN,则返回 NaN。
  • 如果是 Infinity 除以 Infinity,则返回 NaN。
  • 如果是 0 除以 0,则返回 NaN。
  • 如果是非 0 的有限值除以 0,则根据第一个操作数的符号返回 Infinity 或-Infinity。
  • 如果是 Infinity 除以任何数值,则根据第二个操作数的符号返回 Infinity 或-Infinity。
  • 如果有不是数值的操作数,则先在后台用 Number()函数将其转换为数值,然后再应用上述规则。

3、取模操作符

【表现形式】: %

【使用注意事项】:

  • 如果操作数是数值,则执行常规除法运算,返回余数。
  • 如果被除数是无限值,除数是有限值,则返回 NaN。
  • 如果被除数是有限值,除数是 0,则返回 NaN。
  • 如果是 Infinity 除以 Infinity,则返回 NaN。
  • 如果被除数是有限值,除数是无限值,则返回被除数。
  • 如果被除数是 0,除数不是 0,则返回 0。
  • 如果有不是数值的操作数,则先在后台用 Number()函数将其转换为数值,然后再应用上述规则。

5、指数操作符

【表现形式】: **

【案例】:

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

6、加性操作符

1、加法操作符

【表现形式】: +

2、减法操作符

【表现形式】: -

7、关系操作符

【主要包含内容】: 小于(<)、大于(>)、小于等于(<=)和大于等于(>=)

8、相等操作符

  • 等于:==
  • 不等于:!=
  • 全等:===
  • 不全等:!==

9、条件操作符

【语法】:

variable = boolean_expression ? true_value : false_value;

10、赋值操作符

  • 乘后赋值(*=)
  • 除后赋值(/=)
  • 取模后赋值(%=)
  • 加后赋值(+=)
  • 减后赋值(-=)
  • 左移后赋值(<<=)
  • 右移后赋值(>>=)
  • 无符号右移后赋值(>>>=)

11、逗号操作符

// 逗号操作符可以用来在一条语句中执行多个操作,如下所示:
let num1 = 1, num2 = 2, num3 = 3;
举报

相关推荐

0 条评论