l 如果其中一個操作數(shù)的類型為 Boolean ,那么,首先將它轉換為數(shù)字類型,false 轉換為 0, true 將轉換為 1。
l 如果其中一個操作數(shù)的類型是字符串,另外一個為數(shù)字類型,那么,將字符串轉換為數(shù)字進行比較。
l 如果其中一個操作數(shù)的類型是字符串,另外一個為 object 類型,那么,將調用對象的 toString 方法之后,比較字符串。
l 如果其中一個操作數(shù)的類型是數(shù)字類型,另外一個為 object 類型,那么,將對象轉換為數(shù)值后進行數(shù)字比較。
以下的規(guī)定了一些特殊的比較:
l null 和 undefined 是相等的。
l null 和 undefined 不會轉換為任何其他類型
l 如果任何一個操作的結果為 NaN,那么相等比較返回 false,不相等比較返回 true。注意,即使兩個操作數(shù)都為 NaN,返回結果一樣是 false,也就是說,NaN 不等于 NaN。
l 如果兩個操作數(shù)都是對象,那么比較它們引用的值,如果引用同一個對象,那么,返回真,否則,返回假。
alert(null == undefined); // true
alert(undefined == null); // true
alert(true == 1); // true
alert(false == 0); // true
alert(true == 2); // false
var obj = {};
alert(10 == obj); // false
完全相同的比較 === 和不完全相等 !==
完全相同的比較用來比較不進行轉換是否相等,例如:
var a = "100";
var b = 100;
alert(a == b); // true
alert(a === b); // false
== 比較將返回真,因為 “100” 首先轉換為數(shù)字 100, 然后與數(shù)字 100 進行比較,結果相等。
=== 比較將返回假,因為字符串 ”100” 不經(jīng)過轉換的話,與數(shù)字 100 不相等。
!== 用于比較在不轉換的情況下,是否不相等。
alert(a != b); // false
alert(a !== b); // true
第一種情況將返回假,因為轉換后是相等的。第二種情況將返回真,因為不經(jīng)過轉換的話,他們一個是字符串,一個是數(shù)字,是不相等的。