亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript中Number.isNaN 和 isNaN 的區(qū)別詳解

 更新時(shí)間:2023年09月04日 09:44:39   作者:Lvzl  
本文和大家分享一個(gè)前幾天寫代碼踩的坑,筆者在業(yè)務(wù)邏輯中需要對(duì)一個(gè)值進(jìn)行NaN的判斷,由于筆者的不嚴(yán)謹(jǐn),使用了isNaN,從而引起B(yǎng)ug,也正是因?yàn)檫@個(gè),筆者才知道了isNaN和Number.isNaN的區(qū)別,所以本文就和大家聊聊它們的區(qū)別

前言

本文和大家分享一個(gè)前幾天寫代碼踩的坑,筆者在業(yè)務(wù)邏輯中需要對(duì)一個(gè)值進(jìn)行 NaN 的判斷,由于筆者的不嚴(yán)謹(jǐn),使用了isNaN,從而引起了Bug,也正是因?yàn)檫@個(gè),筆者才知道了 isNaNNumber.isNaN 的區(qū)別,如果你認(rèn)為這倆沒區(qū)別,覺得 isNaN 是歷史遺留的全局變量,后面又加到 Number 上的話,建議你接著往下看。如果你知道他們的區(qū)別,可以劃走了。??

筆者將從以下兩個(gè)方面來描述這個(gè)知識(shí)點(diǎn):

  • 什么是NaN。
  • isNaNNumber.isNaN 的區(qū)別是什么。

什么是NaN

JS 中的 NaN,是 Not a Number 的縮寫,代表一個(gè)值 或者 一個(gè)表達(dá)式的值 不是一個(gè)數(shù)字。它有以下幾個(gè)特點(diǎn):

  • 它是全局作用域中的一個(gè)變量。
  • Number.NaNNaN 是同一個(gè)東西,有相同的特性,只不過一個(gè)是全局變量;一個(gè)是 Number 上的屬性。但是它倆也不能劃等號(hào),畢竟 NaN 自己都不等于自己。
  • NaN 涉及數(shù)學(xué)運(yùn)算,通常情況下都會(huì)返回 NaN,但是還有例外,看下圖:

  • NaN 涉及關(guān)系比較(><>=<=)時(shí),都返回false。

什么情況下會(huì)得到NaN呢?

  • 顯式將非 NumBer 類型轉(zhuǎn)為 Number 類型,比如 Number('aaa')。
  • 在調(diào)用一些需要數(shù)字類型參數(shù)的 API 時(shí),可能 API 內(nèi)部會(huì)做轉(zhuǎn)換,一旦無法轉(zhuǎn)為數(shù)字,可能就返回了 NaN,比如 Math.abs('aaa')。
  • 等等......

那在平時(shí)開發(fā)中,為了保證我們寫的代碼邏輯運(yùn)行正常,就可能需要對(duì) NaN 判斷,接下來我們就來看下判斷 NaN 的兩個(gè) API 有啥不同。

isNaN 和 Number.isNaN 的區(qū)別

首先,這倆 API 都能夠用于判斷 NaN,這一點(diǎn)從 API 的名字就能看出,然后各位看圖總結(jié)不同的地方:

不同點(diǎn):

  • Number.isNaN 是直接拿參數(shù)與 NaN 去比,也就是說,你一定要傳 NaN 進(jìn)去才返回 true。至于怎么比的,咱也不知道,反正不是 ===,因?yàn)?NaN 的特性——自己不等于自己。
  • isNaN 會(huì)先嘗試將參數(shù)轉(zhuǎn)換成數(shù)字,如果可以轉(zhuǎn)換成數(shù)字,則返回 false;否則返回true。

咱們不妨來討論一下,Number.isNaN內(nèi)部的實(shí)現(xiàn),肯定不是:

Number.isNaN = (target) => target === NaN  // 自己不等于自己

我猜可能是:

// 因?yàn)橹挥袀?`NaN` 進(jìn)去才返回 `true`,而 NaN 是 Number 類型
// 再加上 `NaN + '' === 'NaN'`
// 也許是對(duì)的
Number.isNaN = (target) => Object.prototype.toString.call(target) === '[object Number]' && target+'' === 'NaN'

總結(jié)

本文主要內(nèi)容為:

  • NaN 的特性
  • isNaNNumber.isNaN 的區(qū)別,一句話總結(jié):Number.isNaN只有傳 NaN 進(jìn)去才返回 true;isNaNNaN 或者不能轉(zhuǎn)化為 Number 的都會(huì)返回 true。

以后咱們還是不要使用isNaN為好!

以上就是JavaScript中Number.isNaN 和 isNaN 的區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript Number.isNaN和isNaN區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論