隱式轉換和

2021-10-08 21:46:54 字數 1614 閱讀 5613

boolean([

])// true

==true

// false!!

==true

// true ![

]==// true

…本來以為理所當然應該這樣的問題,原來好複雜。

ecmascript中相等操作符 ==,這種操作符會先轉換運算元(隱式轉換),然後再比較它們的相等性。

基本轉換規則:

① 如果有乙個運算元是布林值,則在比較相等性之前先將其轉換為數值——false轉換為0,而true轉換為;

② 如果乙個運算元是字串,另乙個運算元是數值,在比較相等性之前先將字串轉換為數值;

③ 如果乙個運算元是物件,另乙個運算元不是,則呼叫物件的valueof()方法,用得到的基本型別值按照前面的規則進行比較,如果沒有valueof()方法,則呼叫 tostring();

這兩個操作符在進行比較時則要遵循下列規則:

① null 和 undefined 是相等的;

② 要比較相等性之前,不能將 null 和 undefined 轉換成其他任何值;

① !優先順序最高,先執行 !

boolean() = true,所以 ! == 轉換為: false ==

② 根據轉換規則①:布林值在比較相等性之前先將其轉換為數值

所以 false == 轉換為 0 ==

③根據轉換規則③乙個是物件,另乙個不是,呼叫物件的valueof()方法,用得到的基本型別值按照前面的規則進行比較,如果沒有valueof()方法,則呼叫 tostring()

對於空陣列,.tostring() -> 『』 ,所以 == 0 轉化為 0 == 『』

④根據規則②:乙個是字串,另乙個是數值,比較之前先將字串轉換為數值

所以 0 == 『』 轉換為 0 == 0,為true

概括一下:

! ==    —>   false ==   —>   0 ==    —>    0 == 『』    —>   0 == 0

① 先執行乙個 !

! 會將運算元的布林值求反,而boolean() = true,所以: ! ! —> ! false

② !false顯而易見就是 true

幾個比較特殊的:

null

== undefined // true

undefined ==

0// false

null==0

// false

nan==

nan// false

nan!=

nan// true

"5"==

5// true

true==1

// true

true==2

// false

隱式轉換和隱式引數

1 隱式轉換 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉換為另一種型別 object scala01 implicit def f1 d double int double 是輸入型別,int 是轉換後的型別 隱式函式的底層工作原理 def...

八 隱式轉換和隱式引數

目錄 一 隱式轉換 1 隱式函式入門 2 隱式轉換的注意事項和細節 3 隱式轉換豐富類庫功能 二 隱式值 三 隱式類 四 隱式的轉換時機 五 隱式解析機制 六 隱式轉換的前提 1 隱式函式基本介紹 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉...

Scala 隱式轉換和隱式引數

紙上得來終覺淺,絕知此事要躬行!隱式函式基本介紹 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉換為另一種型別 隱式函式快速入門 使用隱式函式可以優雅的解決資料型別轉換,案例入門.implicit def f1 d double int dou...