欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JavaScript中三個等號和兩個等號的示例分析-創(chuàng)新互聯(lián)

小編給大家分享一下JavaScript中三個等號和兩個等號的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

十多年的石嘴山網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網(wǎng)站建設的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整石嘴山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“石嘴山網(wǎng)站設計”,“石嘴山網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

引子

眾所周知,用在if條件判斷語句中,js有六種假值:false, null, undefined, '', NAN, 0。先來看幾個例子:

[] === []
NaN === NaN
NaN == NaN
0 == []
'' == []
'' == {}
[] == undefined
{} == []
null == undefined

以上這些判斷結果是什么,大家能否一看就知道結果呢?筆者以前對==和===都只有大概的印象,相信大家也都知道,== 判斷如果兩邊變量的類型不同,會將其先做類型轉(zhuǎn)換再作判斷,而 === 則不做類型轉(zhuǎn)換,如果類型不同,就一定返回 false。但是筆者最近看到了一個題目,感覺很有意思,貼出來給大家看看:

var x = 1;
var obj = {
  valueOf: function(){ 
    x = 2; 
    return 0 
    }
  }
console.log(obj == 0, x)

恩,這段代碼輸出的結果是 true, 2,是不是不可思議?還有~

var x = 1;
var obj = {
  valueOf: function(){ 
    return {} 
  }, 
  toString: function(){ 
    return {}
  }
 }
 console.log(obj == 0)

這段代碼直接拋出了異常: Uncaught TypeError: Cannot convert object to primitive value。

如果你和我一樣覺得很奇怪,那就繼續(xù)往下看吧~

===的規(guī)則

這個比較簡單,我把規(guī)則羅列一下

  1. 如果類型不同,就不相等

  2. 如果兩個都是數(shù)值,并且是同一個值,那么相等,例外的是,如果其中至少一個是NaN,那么不相等。(判斷一個值是否是 NaN,只能用isNaN() 來判斷)

  3. 如果兩個都是字符串,每個位置的字符都一樣,那么相等;否則不相等。

  4. 如果兩個值都是true,或者都是false,那么相等。

  5. 如果兩個值都引用同一個對象或函數(shù),那么相等;否則不相等。

  6. 如果兩個值都是null,或者都是undefined,那么相等。

這里不難發(fā)現(xiàn),復合類型的數(shù)據(jù)(比如對象、數(shù)組、函數(shù)等)之間的比較不是比較他們的值是否相等,而是比較他們引用的對象是否一樣,因此也不難明白,為什么 [] === [] 判斷為false了。

比如:

JavaScript中三個等號和兩個等號的示例分析

==探究

看下 == 的規(guī)則

  1. 如果兩個值類型相同,進行 === 比較。

  2. 如果兩個值類型不同,他們可能相等。根據(jù)下面規(guī)則進行類型轉(zhuǎn)換再比較:

  3. 如果一個是null、一個是undefined,那么相等。

  4. 如果一個是字符串,一個是數(shù)值,把字符串轉(zhuǎn)換成數(shù)值再進行比較。

  5. 如果任一值是 true,把它轉(zhuǎn)換成 1 再比較;如果任一值是 false,把它轉(zhuǎn)換成 0 再比較。

  6. 如果一個是對象,另一個是數(shù)值或字符串,把對象轉(zhuǎn)換成基礎類型的值再比較。對象轉(zhuǎn)換成基礎類型,利用它的toString或者valueOf方法。 js核心內(nèi)置類,會嘗試valueOf先于toString。例外的是Date,Date利用的是toString轉(zhuǎn)換。非js核心的對象,會比較麻煩,有興趣的同學可以研究一下

  7. 任何其他組合,都不相等。

看到這里,第六條,我們就可以明白,為什么上面的代碼會輸出意想不到的結果甚至拋出錯誤了。

再來看一題:

if (x == 10) 
  x += 5

根據(jù)上面的規(guī)則,試想一下,如果我們輸入的x是字符串20,那么x的結果會變成什么樣?沒錯,就是205,而往往這種情況我們的目的是想計算20+5的值。

綜合上面的例子,不難看出,== 的比較看似會比較方便,比如 1 == '1' ,但是會埋下隱患,比如可能對類型做出錯誤的假設。因此大多數(shù)人建議我們少用== 而盡量使用 ===,事實上我也推薦如果明確知道類型,還是最好用===。

再舉個簡單的例子:團隊協(xié)作中你肯定需要讀別人的代碼。而當你看到==時,要判斷清楚作者的代碼意圖是確實需要轉(zhuǎn)型,還是無所謂要不要轉(zhuǎn)型只是隨手寫了,還是不應該轉(zhuǎn)型但是寫錯了……所花費的腦力和時間比明確的===(加上可能需要的明確轉(zhuǎn)型)要多得多。這樣一想,===不要好太多。

明白了==的機制,那么判斷這6個假值,就變得容易了。

簡單看看幾個例子,大家看看是真是假~

false == ''
false == []
0 == []
'' == []
[] == []
[] == {}
null == undefined
false == undefined

總結

可以用一張圖來表達 == 返回true的幾個假值:

JavaScript中三個等號和兩個等號的示例分析

一、首先看雙等號前后有沒有NaN,如果存在NaN,一律返回false。

二、再看雙等號前后有沒有布爾,有布爾就將布爾轉(zhuǎn)換為數(shù)字。(false是0,true是1)

三、接著看雙等號前后有沒有字符串, 有三種情況:

  1. 對方是對象,對象使用toString()或者valueOf()進行轉(zhuǎn)換;

  2. 對方是數(shù)字,字符串轉(zhuǎn)數(shù)字;

  3. 對方是字符串,直接比較;

  4. 其他返回false

  5. 如果是數(shù)字,對方是對象,對象取valueOf()或者toString()進行比較, 其他一律返回false

  6. null, undefined不會進行類型轉(zhuǎn)換, 但它們倆相等

后記

我的建議是:如果你的的確確知道你在做什么(了解類型轉(zhuǎn)換的結果),可以用==;否則還是用===吧。

在網(wǎng)上無意中看到的圖,大家可以參考看看:

==號

JavaScript中三個等號和兩個等號的示例分析

===號

JavaScript中三個等號和兩個等號的示例分析

看完了這篇文章,相信你對“JavaScript中三個等號和兩個等號的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)網(wǎng)站建設公司行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章標題:JavaScript中三個等號和兩個等號的示例分析-創(chuàng)新互聯(lián)
分享URL:http://aaarwkj.com/article30/dspcpo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化、網(wǎng)站改版、App設計網(wǎng)頁設計公司、網(wǎng)站設計公司、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計
色香蕉精品国产综合| 久久久精品在线免费视频| 男人午夜福利视频在线观看| 日本待黄大片一区二区| 国产乱国产乱老熟女视频| 欧美+亚洲+精品+三区| 日本在线一区二区中文| 色伊人久久综合中文字幕| 久激情内射婷内射蜜桃| 亚洲成a人片777777久久| 日本中文字幕有码专区| 久久精品噜噜噜成人av农村| 亚洲国产欧美日韩在线一区| 日韩一级片精品视频在线| 日本国产美女精品一区二区| 亚洲视一区二区三区四区| 日本欧美一区二区二区视频免费| 全国精品免费视频久久久| 一区二区三区深夜福利| 国产黄色一区二区三区| 变态另类专区一区二区三区| 亚洲欧美一级二级三级| 日本韩国国产三级在线| 三级久久三级久久三级| 日韩传媒在线观看视频| 一级丰满少妇av大片| 蜜桃av在线播放视频| 日韩一区二区三区不卡| 天堂av影片在线观看| 国产激情一区二区三区| 色综合天天综合天天更新| 国语自产精品视频在线不卡| 婷婷激情六月中文字幕| 亚洲av不卡一区二区在线观看| 欧美日韩一级性生活片| 国产精品成人av在线| 日韩精品熟妻人女亚洲一区| 四虎免费在线视频观看| 丰满人妻一区二区三区免费| 国产自拍免费在线观看视频| 亚洲综合久久五月天|