最近看到一個有意思的圖片,包含了鮮為人知的秘密,,,
先看看這張有意思的圖片,

圖左應該講的是基督教中的三位一體,翻譯成中文如下,

當然這不是我們的重點,我們的重點在右邊這個圖,講的是js中相等操作,
==是js中的寬松相等(loose equals),===是嚴格相等(strict equals),
這兩個都是用來判斷兩個值是否相等,區別在于,
==允許在比較中進行強制型別轉換,而===不允許,
在轉換不同資料型別時,遵循以下幾個規則:
- 如果有一個運算元是布林值(
true和false),會將false轉為數值0,true轉為數值1, - 如果一個運算子是字串,另一個是數值,則將字串轉成數值(
ToNumber), - 如果一個運算子是物件,另一個不是,則使用
ToPrimitive將物件轉成基本值( 先呼叫物件的valueOf()方法得到基本型別,如果不能得到基本型別則呼叫toString()) ,再按照上面的規則進行轉換, null和undefined是相等的,與其他值不相等,- 數值
NaN與任何值都不相等,包括NaN本身也不相等, - 如果兩個運算子都是物件,那么比較他們是不是同一個物件參考即可,
細品上面的比較規則,品完后回到我們的三位一體js,
"\t"!="0" 這個顯然容易看出來,型別一樣,內容不一樣,
接著看 []=="0" 和 []=="0",一個運算子是物件,另一個不是,[].valueOf() 還是[],所以呼叫[].toString(),值為"",詳細比較就看下圖吧,

對于ToNumber這個操作遵循以下規則:
true轉為1,false轉為0,undefined轉為NaN,null轉為0,- 字串
"","\n","\t"(或者" "等其他空格組合)等空字串總是被轉為0,其他字串遵循基本數字方法處理,失敗回傳NaN, - 對于物件則使用
ToPrimitive將物件轉成基本值,然后遵循上面的規則轉換,
回到我們的三位一體js,演算程序如下,

拋開我們的三位一體,再看看其他的相等操作,遵循上面的規則去套用,應該可以明白其中的所以然了吧,

等號看完了?再加入一些比較符號>,<,

是不是有點頭暈了?先把==消化了,這些關系運算子且聽下回分解!(先挖個坑??)
以上為【白玉無冰】關于"js相等運算子"的技術分享,歡迎關注公中號【白玉無冰】,如果對你有點幫助,歡迎分享給身邊的朋友,
參考書籍:
《JavaScript 高級程式設計》
《你不知道的 JavaScript》
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/126427.html
標籤:JavaScript
上一篇:深入解讀ES6系列(四)
