javascript不同類型對象比較規則
阿新 • • 發佈:2017-08-31
[0 不同的 val tro 對象 on() primitive read gin
例子一:
[0]==true;
首先會把true進行toNumber,結果為1,式子及轉化為 [0]==1
然後[0]會被toString(),結果為“0”,式子轉化為“0”==1
接著“0”會被toNumber(),結果為0,式子轉化為0==1
最後根據type(x)==type(y),式子轉化為0===1
所以[0]==true會得到false
例子二:
“potato”==true;
首先true會被toNumber,結果為1,式子轉化為“potato”==1
然後“potato”會被toNumber,結果為NaN,式子轉化為NaN==1
根據typeof(x)==typeof(y),式子轉化為NaN===1
所以“potato”==true會得到false
例子三:
object with getValue
str = new Number(1);
str.toString = function(){return "2"};
str==1;
這裏typeof str == "object",所以對str進行toPrimitive,這裏會對str進行valueOf取值得到1
所以式子轉化為1==1
所以str==1得到true
例子四:
object with toString
var obj = {
toString : function(){return "2"}
};
obj==1
這裏typeof obj == "object",對obj進行toPrimitive,首先進行valueOf得到object,繼續進行toString()得到“2”,式子專為"2"==1
對“2”進行toNumber得到2,式子轉為2==1
所以obj==1得到false
例子5:
[]==[]
左右是不同的對象,所以false
![]==[]
首先![]==false,這裏[]是一個即存在的對象,若將其強制專為bool類型,通過!![]得到ture,所以![]==false,此時式子專為false==[]
然後false專為0,式子專為0==[]
然後[]專為"",式子專為0==“”
然後""轉為0,式子專為0==0
所以![]==[]得到true
例子6:
!{}=={}
首先!{}專為false,規則和5一樣,式子轉為false=={}
false專為0,式子轉為0=={}
對{}進行toPrimitive得到"[object Object]",式子專為0=="[object Object]"
對"[object Object]"進行toNumber得到NaN,式子專為0==NaN
所以!{}=={}得到 false
轉自:http://www.cnblogs.com/simayixin/archive/2011/03/21/1990831.html
javascript不同類型對象比較規則
例子一:
[0]==true;
首先會把true進行toNumber,結果為1,式子及轉化為 [0]==1
然後[0]會被toString(),結果為“0”,式子轉化為“0”==1
接著“0”會被toNumber(),結果為0,式子轉化為0==1
最後根據type(x)==type(y),式子轉化為0===1
所以[0]==true會得到false
例子二:
“potato”==true;
首先true會被toNumber,結果為1,式子轉化為“potato”==1
然後“potato”會被toNumber,結果為NaN,式子轉化為NaN==1
根據typeof(x)==typeof(y),式子轉化為NaN===1
例子三:
object with getValue
str = new Number(1);
str.toString = function(){return "2"};
str==1;
這裏typeof str == "object",所以對str進行toPrimitive,這裏會對str進行valueOf取值得到1
所以式子轉化為1==1
所以str==1得到true
例子四:
object with toString
var obj = {
toString : function(){return "2"}
};
obj==1
對“2”進行toNumber得到2,式子轉為2==1
所以obj==1得到false
例子5:
[]==[]
左右是不同的對象,所以false
![]==[]
首先![]==false,這裏[]是一個即存在的對象,若將其強制專為bool類型,通過!![]得到ture,所以![]==false,此時式子專為false==[]
然後false專為0,式子專為0==[]
然後[]專為"",式子專為0==“”
然後""轉為0,式子專為0==0
例子6:
!{}=={}
首先!{}專為false,規則和5一樣,式子轉為false=={}
false專為0,式子轉為0=={}
對{}進行toPrimitive得到"[object Object]",式子專為0=="[object Object]"
對"[object Object]"進行toNumber得到NaN,式子專為0==NaN
所以!{}=={}得到 false
轉自:http://www.cnblogs.com/simayixin/archive/2011/03/21/1990831.html
javascript不同類型對象比較規則