在JavaScript中,区分0和空字符串最安全的方法是什么?

在JavaScript中,区分0和空字符串最安全的方法是什么?,javascript,Javascript,从用户输入中,我收到一个必须包含数字的字符串0和空字符串必须区别对待 我做了这个简短的案例研究 0 == "" // true parseInt(0) == "" // true parseInt("") // NaN parseInt("") == "NaN" // false parseInt("") == NaN // false typeof parseInt("") // "number" 通过一点额外的研究,我制定了这个解决方案(考虑用户输入的uInput) 在Google Chr

从用户输入中,我收到一个必须包含数字的字符串<代码>0和空字符串必须区别对待

我做了这个简短的案例研究

0 == "" // true
parseInt(0) == "" // true
parseInt("") // NaN
parseInt("") == "NaN" // false
parseInt("") == NaN // false
typeof parseInt("") // "number"
通过一点额外的研究,我制定了这个解决方案(考虑用户输入的
uInput

在Google Chrome中,它似乎能够正确区分0和空字符串

我想知道的是:

  • 这是最好/最有效的解决方案吗
  • 此解决方案是否与任何浏览器兼容
  • 这甚至是一个解决方案吗?有什么方法可以使
    n
    成为 不是数字的东西(考虑到
    uInput
    可以是任何类型的字符串)

我不会问这个问题,但由于空字符串和0被视为相同的(?!),我不知道我的代码可能会暴露在哪些其他漏洞中。

我会使用
===
,可以这样尝试:
0===“”
/false

它们与类型转换的区别如下:

这甚至是一个解决方案吗?有没有办法让n变成数字以外的东西

对<代码> PARSETIN < /COD>只在解析字符串时考虑字符串的第一个整数部分。它会忽略其余部分,因此
“12.34 oops”
仍将验证为
12

我收到一个必须包含数字的字符串

您可以使用来测试:

/^\d+$/.test(uInput)

对于只包含(且至少包含一个)数字的字符串,它将生成
true
,对于其他任何字符串(非数字和空字符串),它将生成
false

创建您自己的测试,您确实喜欢对每个字符串进行一百万次尝试并检索所需的时间


对于浏览器兼容性,我想简单的操作应该是相似的。

我会这样做:

var nmbr = parseInt(uInput, 10);
if (!isNaN(nmbr)) {
    // Yay, valid input!
} else {
    // Ups, weird input...
}
这似乎是最简单、最正确的答案,因为。

试试这个:

function validate(uInput){
    var regEx = /^[1-9]{1}[\d]*$/;
    if (regEx.test(uInput))
        alert(uInput + " is a valid number.");
    else
        alert(uInput + " is not valid number.");

    var validNumber = parseInt(uInput);
}
因为==首先执行类型强制:

0 == false, "" == false so false == false.
您应该使用==,其中

0 === "" // false

没有类型强制。

如果(parseInt(uInput)=0&&uInput.length()==0){那么它不是0}
这将表明“3434字符串”是有效的输入,而不是:(我假设@Saturnix想要在第一个数字之后删除字符串…
parseInt('3434 String'
将返回3434,这对我来说似乎很好。但是,如果您想更严格一些,可以使用
Number(uInput)
parseInt(uInput,10)
结果匹配,并检查它们之间的差异。“3434 String”成为3434对我来说没问题-我只是想确保我得到的最终值是一个数字而不是一个字符串。我没有考虑检查parseInt()的可能返回值。因为你证明了只能是2(数字或NaN),所以我同意。
0 == false, "" == false so false == false.
0 === "" // false