簡體   English   中英

檢查javascript中的數值

[英]Check numeric value in javascript

我在網上閱讀了教程:實際上,最可靠的轉換檢查是regexp或isNumeric:

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n)
}

我的問題是為什么這個功能不能簡化為:

  function isNumeric(n) {
      return isFinite(n)
  }

因為isFinite(n)將對非數字值返回true,例如:

alert(isFinite(false)); // displays true

我的問題是為什么這個功能不能簡化為:

 function isNumeric(n) { return isFinite(n) } 

它不能,不,你想要那里的parseFloat ,如果有任何機會n可能不是一個數字開始。 但它可以簡化為:

function isNumeric(n) {
    return isFinite(parseFloat(n));
}

...因為isFinite(NaN)是false,這就是你的函數無論如何都返回了無法解析的數字。

值得注意的是, parseFloat將停在第一個無效字符並返回它找到的任何數字,因此parseFloat("123abc")123 ,而不是NaN 如果要驗證整個字符串是否可以正確解析為浮點,請使用+Number()

function isNumeric(n) {
    return isFinite(+n); // Or: return isFinite(Number(n));
}

現在,如果您確定n始終是一個數字(不是布爾值或字符串或其他東西),那么是的,您可以跳過解析階段。

好吧,不,你不能使用是有限的,因為只會返回有限數字的真。

例如isFinite(1/0)返回false。

無限是一個數字,它不是有限的。

我建議看一下大型圖書館如何做到這一點:

jQuery的

isNumeric: function( obj ) {
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN
   return obj - parseFloat( obj ) >= 0; 
}

Underscore.js

function isNumber(obj) {
   return toString.call(obj) == '[object Number]';
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM