因為一邊寫PHP,一邊寫javascript,因為都算是script等級的語言,所以兩者在寫法上有些相似之處。所以偶而會碰到一些True/False的判定上兩者不太一樣的地方,特以本篇整理出javascript 常用的判斷值。
Expression | Result |
---|---|
var x=""; | False |
var x=null; | False |
var x; | False |
undefined | False |
undefined==undefined | True |
var x=NaN; | False |
NaN==NaN; | False |
var x=NaN; x==x; | False |
var x=Infinity; | True |
Infinity==Infinity; | True |
null==undefined | True |
{}=={}; | False |
var x={}; x==x; | True |
[]==[];
|
False |
var x ==[]; x==x; | True |
[]==![]; | True |
[]=='' | True |
[]==0 | True |
['']==0 | True |
['']=='' | True |
[0]==0 | True |
[0]=='' | False |
[null]=='' | True |
[null]==0 | True |
[undefined]=='' | True |
[undefined]==0 | True |
var x=[]; | True |
var x={}; | True |
var x=1; | True |
var x=0; | False |
var x="0"; | True |
var x=True; | True |
var x="True"; | True |
var x=False; | False |
var x="False"; | True |
以上 在 == 的判斷式下,會有奇怪的規則,說明如下:
- 比較的雙方,若其中之一為Boolean時,將 True 轉為 1,False轉為0
- 若其中一方是數字,另一方是字串時,則將字串透過 Number()型轉為數字後進行比較
- 若一方是物件/陣列,另一方為基本型別(String / Number / Boolean)時,則透過 valueOf() / toString() 取出該物件的基本型別值後再進行比較。
- 雙方都是物件/陣列,則判斷雙方是否指向同一個實體。
- NaN跟一切比較都會是false,包含自己。
國外有人寫了個完整的真值表 :https://thomas-yang.me/projects/oh-my-dear-js/