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;