-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【JS】文档 #40
Comments
. |
2 similar comments
. |
. |
运算符算术运算符
复合赋值运算符
一元运算符一元运算符只有一个操作数。 delete删除一个对象的属性或者一个数组中某一个键值 voidvoid运算符,表明一个运算没有返回值。 // 表达式
void (expression)
void expression
// 示例1
var a = 1
var b = void(a++)
console.log(a) // result: 2
console.log(b) // result: undefined
// 如下创建了一个超链接文本,当用户单击该文本时,不会有任何效果。
<a href="javascript:void(0)">Click here to do nothing</a> typeof判断给定对象的类型
|
运算符 | 语法 | 说明 |
---|---|---|
逻辑与,AND(&& ) |
expr1 && expr2 |
若 expr1 可转换为 true ,则返回 expr2 ;否则,返回 expr1 。 |
逻辑或,OR(` | `) | |
逻辑非,NOT(! ) |
!expr |
若 expr 可转换为 true ,则返回 false ;否则,返回 true 。 |
(双重非(
!!
)运算符) :!0 === true
、!!0 = false
短路求值
作为逻辑表达式进行求值是从左到右,它们是为可能的“短路”的出现而使用以下规则进行测试:
false && anything
// 被短路求值为falsetrue || anything
// 被短路求值为true
逻辑的规则,保证这些评估是总是正确的。请注意,上述表达式的anything
部分不会被求值,所以这样做不会产生任何副作用。
按位运算符
按位运算符将它的操作数视为32位元的二进制串(0和1组成)而非十进制八进制或十六进制数。例如:十进制数字9用二进制表示为1001,位运算符就是在这个二进制表示上执行运算,但是返回结果是标准的JavaScript数值。
位运算符有 7 个,分为两类:
- 逻辑位运算符:位与(
&
)、位或(|
)、位异或(^
)、非位(~
) - 移位运算符:左移(
<<
)、右移(>>
)、无符号右移(>>>
)
Operator | Usage | Description |
---|---|---|
按位与 AND & |
a & b |
在a,b的位表示中,每一个对应的位都为1则返回1, 否则返回0. |
按位或 OR ` | ` | `a |
按位异或 XOR ^ |
a ^ b |
在a,b的位表示中,每一个对应的位,两个不相同则返回1,相同则返回0. |
按位非 NOT ~ |
~ a |
反转被操作数的位。 |
左移位 shift << |
a << b |
将a的二进制串向左移动b位,右边移入0. |
有符号右移位 >> |
a >> b |
把a的二进制表示向右移动b位,丢弃被移出的所有位.(译注:算术右移左边空出的位是根据最高位是0和1来进行填充的) |
无符号右移位 >>> |
a >>> b |
把a的二进制表示向右移动b位,丢弃被移出的所有位,并把左边空出的位都填充为0 |
位逻辑运算符
位逻辑运算符范例
表达式 | 结果 | 二进制描述 |
---|---|---|
15 & 9 |
9 |
1111 & 1001 = 1001 |
`15 | 9` | 15 |
15 ^ 9 |
6 |
1111 ^ 1001 = 0110 |
~15 |
-16 |
~00000000...00001111 = 11111111...11110000 |
~9 |
-10 |
~00000000...00001001 = 11111111...11110110 |
&
按位与
&
运算符(位与)用于对两个二进制操作数逐位进行比较,并根据下表所示的换算表返回结果。
第一个数的位值 | 第二个数的位值 | 运算结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
|
按位或
|
运算符(位或)用于对两个二进制操作数逐位进行比较,并根据如表格所示的换算表返回结果。
第一个数的位值 | 第二个数的位值 | 运算结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
^
按位异或
^
运算符(位异或)用于对两个二进制操作数逐位进行比较,并根据如表格所示的换算表返回结果。
第一个数的位值 | 第二个数的位值 | 运算结果 |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
~
按位非
~
按位非(NOT) 用于对一个二进制操作数逐位进行取反操作。
其处理过程分为3步:
- 第 1 步:把运算数转换为 32 位的二进制整数。
- 第 2 步:逐位进行取反操作(取反码,即0->1, 1->0)。
- 第 3 步:把二进制反码转换为十进制浮点数。
对 12 进行位非运算,则返回值为 -13
。
console.log( ~ 12 ); //返回值-13
负数二进制:通过将负数转为二进制原码,再求其原码的反码,最后求得的补码即负数的二进制表示结果。
按位非(NOT) 的应用:
简单的理解,对任一数值 x
进行按位非操作的结果为 -(x + 1)
console.log('~null: ', ~null); // => -1
console.log('~undefined: ', ~undefined); // => -1
console.log('~0: ', ~0); // => -1
console.log('~{}: ', ~{}); // => -1
console.log('~[]: ', ~[]); // => -1
console.log('~(1/0): ', ~(1/0)); // => -1
console.log('~false: ', ~false); // => -1
console.log('~true: ', ~true); // => -2
console.log('~(-2.999): ', ~(-2.999)); // => 1
那么, ~~x
就为 -(-(x+1) + 1)
console.log('~~null: ', ~~null); // => 0
console.log('~~undefined: ', ~~undefined); // => 0
console.log('~~0: ', ~~0); // => 0
console.log('~~{}: ', ~~{}); // => 0
console.log('~~[]: ', ~~[]); // => 0
console.log('~~(1/0): ', ~~(1/0)); // => 0
console.log('~~false: ', ~~false); // => 0
console.log('~~true: ', ~~true); // => 1
console.log('~~(-2.999): ', ~~(-2.999)); // => -2
~ value
可用于判断值中是否有某元素:~'abc'.indexOf('d') === 0
~~ value
可代替parseInt(value),而且效率更高些。~~3.56 === 3
移位运算符
移位运算符带两个操作数:第一个是待移位的数,第二个是指定第一个数要被移多少位的数。移位的方向由运算符来控制。
移位运算符把操作数转为32bit整数,然后得出一个与待移位数相同种类的值。
<<
运算符
<<
左移位运算符执行左移位运算。在移位运算过程中,符号位始终保持不变。如果右侧空出位置,则自动填充为 0;超出 32 位的值,则自动丢弃。
把数字 5 向左移动 2 位,则返回值为 20。
console.log(5 << 2); //返回值20
>>
运算符
>>
运算符执行有符号右移位运算。与左移运算操作相反,它把 32 位数字中的所有有效位整体右移,再使用符号位的值填充空位。移动过程中超出的值将被丢弃。
把数值 1000 向右移 8 位,则返回值为 3。
console.log(1000 >> 8); //返回值3
把数值 -1000 向右移 8 位,则返回值为 -4。
console.log(-1000 >> 8); //返回值 -4
用算式进行演示,如图所示。当符号位值为 1 时,则有效位左侧的空位全部使用 1 进行填充。
>>>
运算符
>>>
运算符执行无符号右移位运算。它把无符号的 32 位整数所有数位整体右移。对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的。
下面两行表达式的返回值是相同的。
console.log(1000 >> 8); //返回值3
console.log(1000 >>> 8); //返回值3
对于负数来说,无符号右移将使用 0 来填充所有的空位,同时会把负数作为正数来处理,所得结果会非常大所以,使用无符号右移运算符时要特别小心,避免意外错误。
console.log(-1000 >> 8); //返回值 -4
console.log(-1000 >>> 8); //返回值 16777212
用算式进行演示,如图所示。左侧空位不再用符号位的值来填充,而是用 0 来填充。
左值、赋值及其副作用
左值就是只能出现在赋值运算符左侧的值,在 JavaScript 中主要指变量、对象的属性、数组的元素。
var a = 1;
a = (a++) + (++a) - (a++) - (++a); // result: a = -4
运算符的优先级
JavaScript中的运算符优先级是一套规则。
该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。
例如,乘法
的执行先于加法
。
运算符 | 描述 |
---|---|
. [] () |
字段访问、数组下标、函数调用以及表达式分组 |
++ -- - ~ ! delete new typeof void |
一元运算符、返回数据类型、对象创建、未定义的值 |
* / % |
乘法、除法、求余数 |
+ - + |
加法、减法、字符串连接 |
<< >> >>> |
移位 |
< <= > >= instanceof |
小于、小于或等于、大于、大于或等于、是否为特定类的实例 |
== != === !== |
相等、不相等、全等,不全等 |
& |
按位“与” |
^ |
按位“异或” |
` | ` |
&& |
逻辑“与” |
` | |
? : |
条件运算 |
= OP= |
赋值、赋值运算(如 += 和 &=) |
, |
多重求值 |
The text was updated successfully, but these errors were encountered: