isNaN()vs typecast(varString).tostring()= varString

时间:2017-01-04 18:58:23

标签: javascript string

在一些字符串操作之后,我留下了一个我将调用的4个字符的字符串

varString

我需要查看此字符串是否可以解释为数字。我一直在使用

if(isNaN(Number(varString)) ==  false){return true}

但我想知道是否

if(Number("varString").toString() == varString){return true}

会更好。

这些解决方案中的一个是否更有效,或者更有可能捕获非数字?测试时我没有发现差异,但我可能错过了一些东西。欢迎替代解决方案。

编辑以响应可能的重复:我已经有两种方法可以确定某些内容是字符串还是数字。我问的是哪种方法更好,为什么。

3 个答案:

答案 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)

在第二种情况下,您将从字符串中解析数字并将其转换回字符串。显然,效率较低