国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JavaScript 判斷是否為數(shù)字的幾種方式

這篇具有很好參考價(jià)值的文章主要介紹了JavaScript 判斷是否為數(shù)字的幾種方式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

喜歡博主的文章,歡迎關(guān)注、點(diǎn)贊??、收藏??、留言??支持,謝謝大家


js判斷是否為數(shù)字的方式很多:
  1. typeofinstanceof、Number.isNumber
  2. parseInt、parseFloat
  3. isNaN、isFinite
  4. Number.isNaN、Number.isFinite
  5. 正則表達(dá)式
  6. 終極方案

我們逐一介紹,希望能幫到大家。

1. typeof、instanceof、Number.isInteger

typeof判斷值是不是基本類型number,比如:

let num = 1;
typeof num === 'number'; // true

instanceof判斷值是不是包裝類Number,比如:

let num = new Number(1);
num instanceof Number; // true

Number.isInteger判斷值是否是整數(shù):

Number.isInteger(1);   // true
Number.isInteger('1'); // false
Number.isInteger(1.1); // false

這幾種方式的缺點(diǎn),都是只能基于類型判斷,無法判斷字符串是否是數(shù)值。

2. parseInt、parseFloat

這個(gè)方法的特點(diǎn),一句話,返回字符串開頭最長的有效數(shù)字。

我們可以用!isNaN(parseFloat(value))來判斷字符串是否是數(shù)值。

let str1 = '123';
let str2 = 'abc';
!isNaN(parseFloat(str1)); // true,是數(shù)字
!isNaN(parseFloat(str2)); // false,不是數(shù)字

parseIntparseFloat解析的時(shí)候遇到非法字符結(jié)束,返回解析到的數(shù)值。也就是說只要字符串頭部是合法數(shù)值,那么就能解析出數(shù)值,哪怕整體不是數(shù)值。比如123abc,會(huì)被解析程123。

因此,上面的判斷方式還不夠嚴(yán)謹(jǐn),下面的終極方案是比較嚴(yán)謹(jǐn)?shù)姆绞健?/p>

3. isNaN、isFinite

在介紹這兩個(gè)方法之前,先講下NaN,它表示Not-a-Number。兩個(gè)NaN無法直接比較相等,因?yàn)槲覀冎恢浪皇菙?shù)值,是啥不確定,也就無法比較相等。

NaN === NaN;         // false
NaN == NaN;          // false
Object.is(NaN, NaN); // false
  • isNaN(value),如果ToNumber(value)的結(jié)果為NaN返回true,否則返回false。
  • isFinite(value),如果ToNumber(value)的結(jié)果為數(shù)值,且不等于Infinity-Infinity返回true,否則返回false。

isNaNisFinite都會(huì)先將傳入的值轉(zhuǎn)成數(shù)值,再進(jìn)行判斷。ToNumber的規(guī)則跟直接使用Number函數(shù)一樣。一些非數(shù)值在類型轉(zhuǎn)換的時(shí)候都能轉(zhuǎn)成數(shù)值,比如:

Number(true);         // 1
Number(false);        // 0
Number(null);         // 0
Number('');           // 0

null、true、false、''使用isNaN結(jié)果都是false,但是它們本身不是數(shù)值,因此不能單獨(dú)使用isNaN。

4. Number.isNaN、Number.isFinite

這兩個(gè)方法跟對應(yīng)的全局方法是不一樣的。

  • Number.isNaN(value),如果valueNaN返回true,否則返回false。
  • Number.isFinite(value),如果value為數(shù)值,且不等于Infinity-Infinity返回true,否則返回false。

區(qū)別是全局方法會(huì)有強(qiáng)制類型轉(zhuǎn)換,而這兩個(gè)方法沒有強(qiáng)制類型轉(zhuǎn)換:

Number.isNaN(null);      // true
Number.isNaN(true);      // true
Number.isNaN(false);     // true
Number.isNaN('');        // true

可以看,由于沒有類型轉(zhuǎn)換,所以Number.isNaN判斷null、true、false、''的結(jié)果都是true。

但是“副作用”是數(shù)字字符串也會(huì)得到true

Number.isNaN('123');    // true

Number.isNaN等價(jià)與:

Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && isNaN(value);
}

Number.isFinite等價(jià)于:

if (Number.isFinite === undefined) Number.isFinite = function(value) {
    return typeof value === 'number' && isFinite(value);
}

因此,這兩個(gè)方法本質(zhì)上也是基于類型的,沒法判斷一個(gè)字符串是否為數(shù)值。

5. 正則表達(dá)式

let exp = /^[+-]?\d*(\.\d*)?(e[+-]?\d+)?$/;
exp.test('+1.9');   // true
exp.test('-.1e11'); // true

這個(gè)正則可以判斷整數(shù)、浮點(diǎn)數(shù)、正負(fù)數(shù)和科學(xué)計(jì)數(shù)法。

不過我覺得判斷是否是數(shù)值用正則,有點(diǎn)小題大做了。

6. 終極方案(推薦)

我們先看方案:

!isNaN(parseFloat(value)) && isFinite(value);

這其實(shí)是jquery中$.isNumeric的源碼,多么簡潔且優(yōu)雅。

接下來我們看看它的原理,我們以字符串123abc為例,我們應(yīng)該得到false。

  1. parseFloat('123abc')得到123;
  2. !isNaN(123)得到true
  3. isFinite('123abc')得到false;
  4. 最終結(jié)果為false

單獨(dú)使用!isNaN(parseFloat(value))會(huì)將123abc當(dāng)成數(shù)值,所以用isFinite額外判斷一次,isFinite的另一個(gè)作用是排除無窮數(shù)。

!isNaN(parseFloat(Infinity));  // true
!isNaN(parseFloat(Infinity)) && isFinite(Infinity); // false

而且,因?yàn)?code>parseFloat的解析是純字符串解析,沒有類型轉(zhuǎn)換,所以不會(huì)將null、true、false、''當(dāng)成數(shù)值。

!isNaN(parseFloat(null)) && isFinite(null);   // false
!isNaN(parseFloat(true)) && isFinite(true);   // false
!isNaN(parseFloat(false)) && isFinite(false); // false
!isNaN(parseFloat('')) && isFinite('');       // false

妙,妙不可言。

7. 結(jié)語

對這幾個(gè)方法的介紹并不全面,因?yàn)槲覀兲接懙闹黝}是“判斷值是否為數(shù)值”。這幾個(gè)方法任何一個(gè)單獨(dú)拎出來,都能講一篇,有時(shí)間再跟大家分享。文章來源地址http://www.zghlxwxcb.cn/news/detail-409025.html

到了這里,關(guān)于JavaScript 判斷是否為數(shù)字的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JavaScript中 判斷網(wǎng)絡(luò)狀態(tài)的幾種方法

    1. 使用 Navigator onLine 屬性 Navigator onLine 屬性判斷瀏覽器是否在線,在線返回 true,離線返回 false; Navigator onLine 是只讀屬性,所有主流瀏覽器都支持 onLine 屬性; 2. 使用 ononline、onoffline 事件 這兩個(gè)方法屬于 “偵聽器”,在網(wǎng)絡(luò)連接 / 斷開的瞬間會(huì)觸發(fā)(當(dāng)網(wǎng)絡(luò)從離線變?yōu)樵?/p>

    2024年01月24日
    瀏覽(21)
  • Java判斷null的幾種方式

    Java判斷null的幾種方式

    組內(nèi)code review時(shí),有同學(xué)提到字符串判斷空值的寫法,如下兩種, (1)null在后, (2)null在前, 這兩種寫法,有什么區(qū)別? 這兩個(gè)測試,都可以執(zhí)行,有種解釋是,null放在前面是為了避免少寫一個(gè)\\\"=\\\",因?yàn)閈\\"null=\\\"書寫會(huì)報(bào)錯(cuò),防止筆誤寫成\\\"=null\\\",不會(huì)報(bào)錯(cuò),進(jìn)而漏掉問題。

    2024年02月13日
    瀏覽(20)
  • C語言判斷一個(gè)數(shù)是否是質(zhì)數(shù)的幾種常用方法(求100-1000以內(nèi)的所有質(zhì)數(shù))

    要用代碼判斷一個(gè)數(shù)是否是質(zhì)數(shù),首先我們需要知道什么什么數(shù)稱之為質(zhì)數(shù)。質(zhì)數(shù)又稱素?cái)?shù)。一個(gè)大于1的自然數(shù),除了1和它自身外,不能被其他自然數(shù)整除的數(shù)叫做質(zhì)數(shù);否則稱為合數(shù)(規(guī)定1既不是質(zhì)數(shù)也不是合數(shù))。 以下有三種方法判定質(zhì)數(shù): 通過從2到n-1每個(gè)數(shù)均整除

    2024年02月08日
    瀏覽(99)
  • JavaScript深淺拷貝的幾種方式

    深淺拷貝主要是針對于引用類型而言的 1. JSON.parse(JSON.strigify(Str)) JSON.stringify() 該方法用于將一個(gè)字轉(zhuǎn)換為JSON字符串,該字符串符合JSON格式,并且可以被JSON.parse()方法還原。 對于原始類型的字符串,轉(zhuǎn)換結(jié)果會(huì)帶雙引號(hào) 如果要轉(zhuǎn)換的對象的屬性是undefined,函數(shù)或xml對象,該

    2024年01月19日
    瀏覽(22)
  • JavaScript里實(shí)現(xiàn)繼承的幾種方式

    JavaScript 中的繼承可以通過以下幾種方式來實(shí)現(xiàn): 1、原型鏈繼承 :通過將子類的原型對象指向父類的實(shí)例來實(shí)現(xiàn)繼承。這種方式的優(yōu)點(diǎn)是實(shí)現(xiàn)簡單,缺點(diǎn)是父類的私有屬性和方法子類是不能訪問的。 ? 2、借用構(gòu)造函數(shù)繼承 :通過在子類的構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù)來

    2023年04月23日
    瀏覽(20)
  • JavaScript打開新窗口的幾種方式

    window.location.href window.open 指定參數(shù) NewUrl //’ 彈出窗口的地址; ‘newwindow’ //彈出窗口的名字,非必須,可用空’\\\'代替; height=600 //窗口高度; width=900 //窗口寬度; top=0 //窗口距離屏幕上方的象素值; left=0 //窗口距離屏幕左側(cè)的象素值; toolbar=no //是否顯示工具欄,yes為顯示

    2024年02月14日
    瀏覽(14)
  • Java中驗(yàn)證日期時(shí)間字符串是否合法的幾種方式

    第一種,JDK8之前用SimpleDateFormat類 可以使用SimpleDateFormat類來驗(yàn)證日期時(shí)間的格式和有效性。 首先,可以創(chuàng)建SimpleDateFormat對象,然后使用該對象的parse()方法來驗(yàn)證日期時(shí)間字符串的格式和有效性。如果該方法拋出異常,則表示日期時(shí)間字符串不符合指定的格式,而如果該方法

    2024年02月04日
    瀏覽(39)
  • 控制el-input只輸入數(shù)字的幾種方式

    一、 v-model.number 指令修飾符 使用v-model.number可以將輸入的數(shù)據(jù)轉(zhuǎn)換為Number類型。但是本質(zhì)上還是String類型 有三個(gè)問題: 1.鍵盤先輸入數(shù)字時(shí)沒有問題,數(shù)字后面不會(huì)有字符 2.如果先輸入的是字符再輸入數(shù)字則是拼接效果,字符不會(huì)被排除且可以輸入中文,如: ab123 3.以上兩

    2024年02月13日
    瀏覽(47)
  • 【業(yè)務(wù)功能篇34】Java 字符串?dāng)?shù)字 左右補(bǔ)全0的幾種方式

    業(yè)務(wù)場景: 我們在做一個(gè)單號(hào)字段設(shè)計(jì)的時(shí)候,經(jīng)常需要用到這種格式,比如no2023062800001,no2023062800002,no2023062800003,單號(hào)累計(jì)遞增,前綴是指定的字符串+當(dāng)前日期+數(shù)字五位,不滿五位左邊補(bǔ)0 %06d的定義: 0代表前面要補(bǔ)的字符 6代表字符串長度 d表示參數(shù)為整數(shù)類型

    2024年02月13日
    瀏覽(16)
  • C語言中判斷素?cái)?shù)的幾種方法

    C語言中判斷素?cái)?shù)的幾種方法

    作為C的初學(xué)者們希望大家看看這幾種判斷素?cái)?shù)的方法 既然進(jìn)來了就看完把 題目要求: 判斷n是否為素?cái)?shù)。 首先我們講一下素?cái)?shù)的判定:素?cái)?shù)就是只能被1或者本身整除的數(shù),這就延伸出了幾種不同的判定方法。 方法一:因?yàn)榕袛嗨財(cái)?shù)相當(dāng)于就是判斷這個(gè)數(shù)能不能整除2-這個(gè)數(shù)

    2024年02月11日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包