如果number为0,则对空性的测试失败

Test against emptiness fails if number is 0

本文关键字:测试 失败 number 如果      更新时间:2023-09-26

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

原因如下:

if(myObject.getData()) {
    ...
}
else {
    //here's where I go
}

getData()返回字符串和数字,但是当数字是0时,if测试将其作为布尔值,结果始终是false,而两行后,在花括号内,我需要数字0将其发送到服务器。

检查数据是否不是null,不是false,不是"",甚至不是布尔值,并"保留"我的0的最佳方法是什么?

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

var data = myObject.getData();
if ( data || data === 0 )

一些测试用例:

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

逆转您的要求,似乎您只想要非空字符串和数字。如果这个假设是正确的,您可以使用typeof并执行如下操作:

var data = myObject.getData();
if((typeof data === 'string' && data !== '') || typeof data === 'number') {
  //...
}
else{
  //here's where I go
}

这种方法有两个主要优点:

  1. 它是明确的输入格式,因此是自文档。
  2. 防止将来任何输入类型的修改。