[英]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.