在一些字符串操作之后,我留下了一个我将调用的4个字符的字符串
varString
我需要查看此字符串是否可以解释为数字。我一直在使用
if(isNaN(Number(varString)) == false){return true}
但我想知道是否
if(Number("varString").toString() == varString){return true}
会更好。
这些解决方案中的一个是否更有效,或者更有可能捕获非数字?测试时我没有发现差异,但我可能错过了一些东西。欢迎替代解决方案。
编辑以响应可能的重复:我已经有两种方法可以确定某些内容是字符串还是数字。我问的是哪种方法更好,为什么。
答案 0 :(得分:3)
第二种方法在某些情况下会被证明是错误的,因为<!DOCTYPE HTML>
<html>
<body>
<input type='text'>
</body>
</html>
会转换以Number
开头的数字,但会以数字的形式保存它们,因此0
不会匹配原始字符串:
toString
使用
document.write(Number("0123").toString() == "0123")
(第一个的变体,你不需要用return !isNaN(varString)
进行解析。)
答案 1 :(得分:2)
至少在这些情况下会有差异:
使用"NaN"
isNaN(Number("NaN")) === false; // false
Number("NaN").toString() === "NaN"; // true
使用"-0"
isNaN(Number("-0")) === false; // true
Number("-0").toString() === "-0"; // false
使用空格填充数字
isNaN(Number(" 1 ")) === false; // true
Number(" 1 ").toString() === " 1 "; // false
零填充数字
isNaN(Number("01")) === false; // true
Number("01").toString() === "01"; // false
数字以小数点开头或结尾
isNaN(Number(".5")) === false; // true
Number(".5").toString() === ".5"; // false
数字很大或很小
isNaN(Number("999999999999999999999")) === false; // true
Number("999999999999999999999").toString() === "999999999999999999999"; // false
使用指数形式的非巨大和非微小数字
isNaN(Number("1e1")) === false; // true
Number("1e1").toString() === "1e1"; // false
使用二进制,八进制或十六进制文字
isNaN(Number("0xa")) === false; // true
Number("0xa").toString() === "0xa"; // false
答案 2 :(得分:0)
在第二种情况下,您将从字符串中解析数字并将其转换回字符串。显然,效率较低