1 |
(),. | 圓括號,點運算 |
2 | !,++,——,-+ | 非,自加,自減, |
3 | *,/,% | 乘,除,取余 |
4 | +,- | 加,減 |
5 | >,<,>=,<= | 大於,小於,大於等於,小於等於 |
6 | ==,===,!=,!== | 值相等,類型相等,值不等,類型不等, |
7 | && | 邏輯與 |
8 | || | 邏輯或 |
9 | ? | 條件 |
10 | =,+=,-=,*=,/=,%= | 賦值,加賦值,減賦值,乘賦值,除賦值,取余賦值 |
PS:這是一部分常用的,還有位運算沒有列上去
1
2
|
var
arr =
new
Array();
// 或 var arr = [];
|
我們知道,初始化后,即使數組arr中沒有元素,也是一個object。
1
2
|
typeof
arr;
// "object"
|
既然是object,用於判斷條件時就會被轉化為true
1
2
|
if
(arr)console.log(
"it's true"
);
// it's true
|
但是,如果將arr與布爾值比較:
1
2
3
4
|
arr ==
false
;
// true
arr ==
true
;
// false
|
可是,如果把arr轉化為Boolean,的確是true:
1
2
|
Boolean(arr);
// true
|
那arr與布爾值比較時,到底發生了什么?
原來,任意值與布爾值比較,都會將兩邊的值轉化為Number。
如arr與false比較,false轉化為0,而arr為空數組,也轉化為0:
1
2
3
4
|
Number(
false
)
// 0
Number(arr)
// 0
|
所以,當空數組作為判斷條件時,相當於true。當空數組與布爾值直接比較時,相當於false。
也就出現了以下令人繞圈的現象:
1
2
|
[] == ![];
// true
|
如何避免數組與布爾值比較時出現的坑呢?可以先把數組轉化為布爾值:
1
2
|
Boolean(arr) ==
true
;
// true
|
有同學問:
1
|
new
Array() == [];
|
必須是false,就和new Array() == new Array()一樣。是不同的兩個對象。
但有個問題很奇怪:
1
2
3
4
5
6
7
|
new
Array(1) ==
false
;
// true
// 或
[undefined] ==
false
;
// true
|
這個怎么解釋呢?Number(new Array(1))為什么會是0呢?