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...