JS中的運算符優先級


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呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM