JavaScript学习之路 (二) 操作符
操作符
位操作符
按位非(NOT)
按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反转。
1 | let num1 = 4 // 二进制码 0000000000000000000000000000100 |
注意:正数的原码、反码、补码相同,负数在计算机中的存储为补码,补码转换为原码才可以看出负数的值,步骤为补码-(-1)->反码-(除符号位外按位反转:0为正,1为负)->原码
按位与(AND)
按位与操作符由一个和号字符(&)表示,它有两个操作符数
| 第一个数值值位 | 第二个数值的位 | 结果 |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
1 | // 按位与 |
按位或(OR)
按位或操作符由一个和号字符(|)表示,它有两个操作符数
| 第一个数值的位 | 第二个数值的位 | 结果 |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
1 | // 按位或 |
按位异或(XOR)
按位异或操作符由一个和号字符(^)表示,它有两个操作符数
| 第一个操作数值值位 | 第二个操作数值 | 结果 |
|---|---|---|
| 1 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
1 | // 按位或 |
左移
左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数
1 | // 对3左位移3 |
右移
右移操作符由两个大于号(>>)表示,这个操作符会将数值的所有位向右移动指定的位数
1 | // 对3右位移3 |
无符号右移
无符号右移操作符由三个大于号(>>>)表示,这个操作符会将数值的所有32位向右移动指定的位数
1 | // 对3向无符号右移3 |
布尔操作符
布尔操作符有3个: 非(NOT)、与(AND)、或(OR)。
逻辑非
逻辑非操作符由一个叹号(!)表示,这个操作符会返回一个布尔值。逻辑非操作符首先会将它的操作数转换为布尔值再进行求反操作。
逻辑非操作符遵循下列规则:
- 如果操作数是一个对象,返回
false - 如果操作数是一个空字符串,返回
true - 如果操作数是一个非空字符串,返回
false - 如果操作数是数值 0, 返回
true - 如果操作数是任意非 0 数值 (包括
Infinity), 返回false - 如果操作数是
null,返回true - 如果操作数是
NaN,返回true - 如果操作数是
undefined,返回true
逻辑与
逻辑与由两个和号(&&)表示,有两个操作数。
| 第一个操作数值值位 | 第二个操作数值 | 结果 |
|---|---|---|
true |
true |
true |
true |
false |
false |
false |
true |
false |
false |
false |
false |
它遵循下列规则:
- 如果第一个操作数是对象,则返回第二个操作数
- 如果第二个操作数是对象,则只有在第一个操作数的求值结果为
true的情况下才会返回该对象 - 如果两个操作数都是对象,则返回第二个操作数
- 如果有有一个操作数是
null,则返回null - 如果有有一个操作数是
NaN,则返回NaN - 如果有有一个操作数是
undefined,则返回undefined
逻辑或
逻辑或由两个和号(||)表示,有两个操作数。
| 第一个操作数值值位 | 第二个操作数值 | 结果 |
|---|---|---|
true |
true |
true |
true |
false |
true |
false |
true |
true |
false |
false |
false |
它遵循下列规则:
- 如果第一个操作数是对象,则返回第一个操作数
- 如果第一个操作数的求值结果为false,则返回第二个操作数
- 如果两个操作数都是对象,则返回第一个操作数
- 如果有有两个操作数是
null,则返回null - 如果有有两个操作数是
NaN,则返回NaN - 如果有有两个操作数是
undefined,则返回undefined
关系操作符
小于(<)、大于(>)、小于等于(<=)、大于等于(>=)都是关系操作符,用于两个值比较,返回一个布尔值。
它遵循以下规则:
- 如果两个操作数都是数值、则执行数值比较
- 如果两个操作符都是字符串,则比较两个字符串对象的字符编码值
- 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较
- 如果一个操作数是对象,则调用这个对象的
valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有valueOf()方法,则调用toString()方法,并得到结果根据前面的规则执行比较 - 如果一个操作数是布尔值,则先将其转换为数值,然后进行比较
相等操作符
相等(==)表示如果两个操作数相等,则返回true。而不相等(!=)表示如果两个操作数不相等,则返回false。这两个操作符都会先转换操作数(强制类型转换),再进行比较。
它遵循以下基本规则:
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值(
false-> 0,true-> 1) - 如果一个操作数是字符串,另一个操作数是数值,比较相等性之前先将字符串转换为数值
- 如果一个操作数是对象,另一个操作数不是,则调用对象的
valueOf()方法,用得到的基本数值型按照前面的规则进行比较
操作数在比较时要遵循以下规则:
- 要比较相等性之前,不能将
null和undefined转换为其他任何值 - 如果有一个操作数是NaN,则相等操作符返回
false,不相等返回true。提示:即使两个操作数都是NaN,相等操作符返回false - 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回
true,否在,返回false
注意:全等操作符(===)和不全等(!==)操作符比较的是不转换之前的操作数
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 hao的博客空间! 如果博客中的内容侵犯了您的版权,请与作者联系以将其删除。 非常感谢 !(本文是根据JavaScript高级程序设计(第3版)总结的笔记!)





