希望在与旧的 VB6IsNumeric()函数相同的概念空间中有一些东西?
请注意,许多基本方法都充满了细微的错误(例如空格、隐式部分解析、基数、数组强制等),这里的许多答案都没有考虑到这些错误。以下实现可能对您有用,但请注意,它不支持除小数点“ .”以外的数字分隔符:
.
function isNumeric(str) { if (typeof str != "string") return false // we only process strings! return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)... !isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail }
无论变量内容是字符串还是数字,这都有效。
isNaN(num) // returns true if the variable does NOT contain a valid number
isNaN(123) // false isNaN('123') // false isNaN('1e10000') // false (This translates to Infinity, which is a number) isNaN('foo') // true isNaN('10px') // true isNaN('') // false isNaN(' ') // false isNaN(false) // false
当然,如果需要,您可以否定这一点。例如,要实现IsNumeric您给出的示例:
IsNumeric
function isNumeric(num){ return !isNaN(num) }
仅当字符串仅包含数字字符时才有效,否则返回NaN.
NaN
+num // returns the numeric value of the string, or NaN // if the string isn't purely numeric characters
+'12' // 12 +'12.' // 12 +'12..' // NaN +'.12' // 0.12 +'..12' // NaN +'foo' // NaN +'12px' // NaN
用于将 ‘12px’ 转换为 12,例如:
parseInt(num) // extracts a numeric value from the // start of the string, or NaN.
parseInt('12') // 12 parseInt('aaa') // NaN parseInt('12px') // 12 parseInt('foo2') // NaN These last three may parseInt('12a5') // 12 be different from what parseInt('0x10') // 16 you expected to see.
请记住,与 , 不同+num(parseInt顾名思义)将通过切除小数点后的所有内容将浮点数转换为整数(如果parseInt() 由于这种行为而要使用,则最好使用另一种方法) :
+num
parseInt
parseInt()
+'12.345' // 12.345 parseInt(12.345) // 12 parseInt('12.345') // 12
空字符串可能有点违反直觉。+num将空字符串或带空格的字符串转换为零,并isNaN()假设相同:
isNaN()
+'' // 0 +' ' // 0 isNaN('') // false isNaN(' ') // false
但parseInt()不同意:
parseInt('') // NaN parseInt(' ') // NaN