相同點:
兩個運算符均可用於比較兩個值是否相等,可允許操作任意類型的操作數,如果操作數相等則返回true,否則返回false。
不同點:
"==="運算符也稱為嚴格相等運算符,它用來檢測兩個操作數是否嚴格相等。該運算符首先計算其操作數的值,然后比較這兩個值,比較過程中並不會首先對操作符進行任何類型轉換。
"=="運算符稱為相等運算符,用來檢測兩個操作數是否相等,這里“相等”的定義非常寬松,可以允許進行類型轉換。相等運算符"=="和"==="運算符類似,但相等運算符的比較並不嚴格。如果兩個操作數不是同一類型,那么相等運算符會嘗試對操作數進行一些類型轉換,然后進行比較。例如:
1.如果一個值是null,另一個是undefined,則他們相等。
2.如果一個值是數字,另一個是字符串,比較時現將字符串轉換為數字,然后使用轉換后的值比較。
3.如果其中一個值是true,則將其轉換為1再進行比較。
使用情況:
因為在使用過程中"=="會出現類型轉換,所以為避免在使用"=="過程中出現意想不到的類型轉換而影響比較結果,建議除特殊情況外全部用"==="。(見《JavaScript權威指南》 第六版 268頁)。
效率情況:
由於"=="在計算過程中會存在類型轉換,如果進行很少的操作數判斷的話,則"=="和"==="的效率相差無幾,但是如果進行多次比對的話,則"==="效率整體上會高於"==",測試用例如下,改變for循環次數和運算符(a==b / a===b)即可測試。
1 var date1 = new Date(); 2 var j = 0, k = 0; 3 for(var i =0; i<10000; i++){ 4 var a = undefined; 5 var b = null; 6 a == b ? j++ : k++; 7 } 8 var date2 = new Date(); 9 console.log("一共 " + (date2.getTime()-date1.getTime()) + " 毫秒"); 10 if(j !== 0){ 11 console.log("j==" + j); 12 }else if( k !== 0) { 13 console.log("k==" + k); 14 }
注:此文為自己學習使用js過程中的學習筆記,文中描述若有不當之處,歡迎高手拍磚。
