Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果数字为0,则空性测试失败_Javascript - Fatal编程技术网

Javascript 如果数字为0,则空性测试失败

Javascript 如果数字为0,则空性测试失败,javascript,Javascript,出于某种原因,我的老板更改了我在JS中获得的数据,因此,如果我收到字符串,现在我可以收到从0到n的字符串或数字。直到今天,当我发现要测试的数字正好是0时,旧代码块才出现问题 原因是该代码: if(myObject.getData()) { ... } else { //here's where I go } getData返回字符串和数字,但当数字为0时,if测试将其作为布尔值,结果总是false,而两行之后,在花括号内,我需要数字0将其发送到服务器 检查数据是否为非空、非假、

出于某种原因,我的老板更改了我在JS中获得的数据,因此,如果我收到字符串,现在我可以收到从0到n的字符串或数字。直到今天,当我发现要测试的数字正好是0时,旧代码块才出现问题

原因是该代码:

if(myObject.getData()) {
    ...
}
else {
    //here's where I go
}
getData返回字符串和数字,但当数字为0时,if测试将其作为布尔值,结果总是false,而两行之后,在花括号内,我需要数字0将其发送到服务器


检查数据是否为非空、非假、非布尔甚至非布尔并保留我的0的最佳方法是什么?

您可以在if语句中引入OR,使用严格相等运算符检查它是否为数值0==:

一些测试用例:

data = ""           // false
data = false        // false
data = undefined    // false
data = 0            // true
data = 1            // true
data = "test"       // true

您可以在if语句中引入OR,使用严格相等运算符==,检查它是否为数值0:

一些测试用例:

data = ""           // false
data = false        // false
data = undefined    // false
data = 0            // true
data = 1            // true
data = "test"       // true

相反,您似乎只需要非空字符串和数字。如果该假设正确,您可以使用并执行以下操作:

var data = myObject.getData();

if((typeof data === 'string' && data !== '') || typeof data === 'number') {
  //...
}
else{
  //here's where I go
}
这种方法有两个关键好处:

输入格式是明确的,因此是自文档化的。 它可以防止将来对输入类型进行任何修改。
相反,您似乎只需要非空字符串和数字。如果该假设正确,您可以使用并执行以下操作:

var data = myObject.getData();

if((typeof data === 'string' && data !== '') || typeof data === 'number') {
  //...
}
else{
  //here's where I go
}
这种方法有两个关键好处:

输入格式是明确的,因此是自文档化的。 它可以防止将来对输入类型进行任何修改。
myObject.getData=未定义是否应尝试parseIntmyObject.getData?因为0是一个错误的值…@epascarello:好的,我理解这一点,我正在寻找一个好的解决方案:-myObject.getData=未定义的工作应该尝试parseIntmyObject.getData?因为0是一个错误的值…@epascarello:好的,我理解这一点,我正在寻找一个好的解决方案:-这是我的第一个想法,但我认为它不是很优雅,我做了另一件事,也不那么优雅:我将所有数据转换为字符串,并使用trim测试它们是否返回非空值string@3000你不需要那样做。if语句的第一部分将过滤掉所有错误值,包括空字符串;然后,第二部分将检查Falsy值是否正好等于0。@3000此解决方案的一个问题是,如果您的上司再次更改输入,则可能是如果传递了任何对象,它将接受该值作为真实值。这可能有点奇怪,但考虑到输入类型已经被修改过一次,防范它可能是明智的。这是我的第一个想法,但我认为它不太优雅,我做了另一件事情,也不那么优雅:我将所有数据转换为字符串,并使用trim测试它们是否返回非空的值string@3000你不需要那样做。if语句的第一部分将过滤掉所有错误值,包括空字符串;然后,第二部分将检查Falsy值是否正好等于0。@3000此解决方案的一个问题是,如果您的上司再次更改输入,则可能是如果传递了任何对象,它将接受该值作为真实值。这可能有点奇怪,但考虑到输入类型已经被修改过一次,防范它可能是明智的。