日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

为什么[]==0;JavaScript里什么情况下a==!a为true呢?

發布時間:2023/12/9 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么[]==0;JavaScript里什么情况下a==!a为true呢? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接

JavaScript里什么情況下a==!a為true呢?

答案是當a = []的時候,這是因為JavaScript的類型轉換。

我們先來考慮這個問題,console.log([] == false)會打印什么呢?答案是true。為什么呢?首先,因為當"=="號兩邊其中一個是布爾值的話,先把它轉換為數字(ECMAScript的規范)。于是就變成了求[] == 0。然后問題是為什么[]==0會是true呢?這是因為當"=="的一邊是字符串或數字,另一邊是對象的時候(數組也是對象),先把對象值轉換為原始值再判斷相等。 對象值到原始值是怎么轉換的呢?.對于所有非日期雷對象來說,對象到原始值的轉換基本上就是對象到數字的轉換。有3個步驟:1.所有對象先調用valueOf()方法,如果此方法返回的是原始值,則對象轉為這個原始值。2.如果valueOf方法返回的不是原始值,則調用toString方法,如果toString方法返回的是原始值嗎,則對象轉換為這個原始值。3.如果valueOf和toString方法均沒有返回原始值,則拋出TypeError異常.

好,讓我們看看[]到原始值的轉換是怎么樣的?首先調用[].valueOf()方法,返回值是對象自身,即[],這不是一個原始值。所以繼續調用[].toString()方法,返回的是空字符串"",這是一個原始值,所以此值就作為對象轉換為原始值的輸出。于是問題就變成了求"" == 0.

最后,為什么"" == 0會是true呢?相信很多同學都知道了,當"=="兩邊一個是字符串一個是數字的時候, 先把字符串轉為數字,再進行比較。“”轉成數字為0,所以最后得出[] == false為true。讓我們回到標題 [] == ![]為什么是true。!的優先級比==要高,所以會先執行![]。也就是先把[]轉為布爾類型再取反。 []轉布爾值是true,為什么呢?因為在JavaScript里除了false自身以外只有5個假值,分別是“”,undefined, null, 0, NaN。 除了這5個假值以外,其他所有值轉布爾類型都是true。 一切對象都是真值,包括new Boolean(false)。于是問題就成了剛才我們討論的 [] == false了。故得到 [] == ![]為true。

總結

以上是生活随笔為你收集整理的为什么[]==0;JavaScript里什么情况下a==!a为true呢?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。