摘要:簡單說中的與方法我們一句一句的看結果是邏輯非,會將操作數的布爾值求反,而就是類型轉換,將對應的類型轉換為型所以我們看一看,一次求反返回的就是,再求反返回的就是。原始值不可變更的值,包括布爾值數字和字符串。
說明
直接說出問題
!![] == true //結果是true [] == true //結果是false ![] == [] //結果是true
為什么會出現這種情況
解釋首先說一下,如果你看到這些代碼,能想到 相等運算符(== ),兩個操作數類型不同時,進行的轉換,那么你已經接近答案了。
不要浪費時間,我們需要先知道在JavaScript中的一些比較特別的類型轉換,最好能記住哦!!!
[] 轉為字符串是 "" // String([]) 返回"" [] 轉為數字是 0 // Number([]) 返回0 [] 轉為布爾值是 true // Boolean([]) 返回true true 轉為數字是 1 // Number(true) 返回1 false 轉為數字是 0 // Number(false) 返回0
如果想知道為什么,請點這里。
簡單說 JavaScript中的tostring( ) 與 valueOf( )方法
我們一句一句的看
!![] == true //結果是true
! (邏輯非),會將操作數的布爾值求反,而!! 就是類型轉換,將對應的類型轉換為boolean型
所以我們看一看,[ ]一次求反 (![]) 返回的就是false,再求反(!![]) 返回的就是true。
最后的比較就變成 true == true 自然結果是 true
[]==true //結果是false
這里我們重點說說,相等運算符(==) 在遇到兩個操作數類型不同的時候,要遵守的規則和類型轉換
1、如果-個值是null, 另一個是undefined,則它們相等
null == undefined //返回true
2、如果一個值是數字,另一個是字符串,先將字符串轉換為數字,然后使用轉換后的值進行比較。
1 == "1" //1==1 //結果是true 2 == "1" //2==1 //結果是false
3、如果其中一個值是true,則將其轉換為1再進行比較。如果其中一個值是false,則將其轉換為0再進行比較。
"1" == true //1==1 結果是true 0 == false //0==0 結果是true
4、如果一個值是對象,另一個值是數字或字符串,則將對象轉換為原始值,然后再進行比較。對象通過toString()方法或者valueOf()方法轉換為原始值,JavaScript語言核心的內置類先嘗試使用valueOf(),再嘗試使用toString(),除了日期類,日期類只能使用toString()轉換,那些不是JavaScript語言核心中的對象則通過各自的實現中定義的方法轉換為原始值。
原始值:不可變更的值,包括undefined、null、布爾值、數字、和字符串。
所有的對象都有toString() 和 valueOf()這兩個方法。
toString()方法的作用是,返回一個反映這個對象的字符串。
valueOf()方法的作用是,一個對象那個如果存在任意原始值,它就默認將對象轉換為表示它的原始值。
5、其他不同類型之間的比較均不相等。
好的,我們知道這些規則后,再來看行代碼
[]==true //結果是false
true 會轉為1
[ ] 會轉為 0
最后是比較的是 0 == 1,所以結果是false
理解了上面的內容的話,那么
![] == [] //結果是true
這行代碼,也就好理解了
![ ] ,也就是 [] 先轉為 布爾值(true),然后求反,就是false,false 轉為數字就是0
[ ]轉為數字就是0
最后就是 0 == 0 ,所以結果就是true
強調一點,[ ] 轉數字 是0,轉布爾值,是true,但是這不是說, 0 轉為布爾值是true,而是false,是false,false。
這篇文章主要是說一些關于隱式轉換的事。
根據上面的三行代碼,還能寫出一些其他的來,看看下面這些有趣的代碼吧。
[] == 0 //返回結果是 true ![] == 0 //返回結果是 true [] == "" //返回結果是 true !![] == "" //返回結果是 false "" == true //返回結果是 false
文章不長主要是想說清楚,最開始提到的問題。
最后推薦兩篇相關的文章,希望對大家有所幫助。
簡單說 JavaScript中的tostring( ) 與 valueOf( )方法
簡單說 通過JS的隱式轉換,關鍵時刻救你一命
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/51454.html
摘要:簡單說中的與方法我們一句一句的看結果是邏輯非,會將操作數的布爾值求反,而就是類型轉換,將對應的類型轉換為型所以我們看一看,一次求反返回的就是,再求反返回的就是。原始值不可變更的值,包括布爾值數字和字符串。 說明 直接說出問題 !![] == true //結果是true [] == true //結果是false ![] == [] //結果是true 為什么會出現這種情...
摘要:簡單說中的與方法我們一句一句的看結果是邏輯非,會將操作數的布爾值求反,而就是類型轉換,將對應的類型轉換為型所以我們看一看,一次求反返回的就是,再求反返回的就是。原始值不可變更的值,包括布爾值數字和字符串。 說明 直接說出問題 !![] == true //結果是true [] == true //結果是false ![] == [] //結果是true 為什么會出現這種情...
摘要:說明在比較的時候,會進行隱式轉換,你如果對隱式轉換不是特別熟悉,結果往往出乎你的意料。解釋相信我,這行代碼是簡單的,它并不復雜,我們先來分解一下這行代碼我們把這一行,分解成了行了。簡單說中的與方法簡單說與引發的思考 說明 JavaScript在比較的時候,會進行隱式轉換,你如果對隱式轉換不是特別熟悉,結果往往出乎你的意料。 我們來看看這行代碼 (![]+[])[+!![]- -+!!...
摘要:說明在比較的時候,會進行隱式轉換,你如果對隱式轉換不是特別熟悉,結果往往出乎你的意料。解釋相信我,這行代碼是簡單的,它并不復雜,我們先來分解一下這行代碼我們把這一行,分解成了行了。簡單說中的與方法簡單說與引發的思考 說明 JavaScript在比較的時候,會進行隱式轉換,你如果對隱式轉換不是特別熟悉,結果往往出乎你的意料。 我們來看看這行代碼 (![]+[])[+!![]- -+!!...
閱讀 1240·2021-11-22 13:54
閱讀 1425·2021-11-22 09:34
閱讀 2698·2021-11-22 09:34
閱讀 4008·2021-10-13 09:39
閱讀 3342·2019-08-26 11:52
閱讀 3361·2019-08-26 11:50
閱讀 1529·2019-08-26 10:56
閱讀 1913·2019-08-26 10:44