Javascript True / False 判斷列表

因為一邊寫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

以上 在 == 的判斷式下,會有奇怪的規則,說明如下:

  1. 比較的雙方,若其中之一為Boolean時,將 True 轉為 1,False轉為0
  2. 若其中一方是數字,另一方是字串時,則將字串透過 Number()型轉為數字後進行比較
  3. 若一方是物件/陣列,另一方為基本型別(String / Number / Boolean)時,則透過 valueOf() / toString() 取出該物件的基本型別值後再進行比較。
  4. 雙方都是物件/陣列,則判斷雙方是否指向同一個實體。
  5. NaN跟一切比較都會是false,包含自己。

國外有人寫了個完整的真值表 :https://thomas-yang.me/projects/oh-my-dear-js/