javascript不同類型對象比較規則

來源:互聯網
上載者:User
Type(x) Type(y) Result
type(x)==type(y) x===y
otherwise... false
null undefined true
undefined null true
Number String x==toNumber(y)
String Number toNumber(x)==y
Boolean (any) toNumber(x)==y
(any) Boolean x==toNumber(y)
String or Number Object x==toPrimitive(y)
Object String or Number toPrimitive(x)==y

 

例子一: 

[0]==ture;

首先會把ture進行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 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.