Javascript:0和1数字的真与假比较

Javascript:0和1数字的真与假比较,javascript,Javascript,在处理ajax请求时,如果响应属性为1(类型:number)表示true,或为0(类型:number)表示false, 检查这是否属实的最佳方法是什么。所有这些例子都是有效的,只是想知道是否有一个更好的例子可以使用,以及为什么它更受欢迎 if (response.hasOwnProperty('test')) { // 1 if (response.test === 1) { alert('is true'); } // 2 if (r

在处理ajax请求时,如果响应属性为1(类型:number)表示true,或为0(类型:number)表示false, 检查这是否属实的最佳方法是什么。所有这些例子都是有效的,只是想知道是否有一个更好的例子可以使用,以及为什么它更受欢迎

if (response.hasOwnProperty('test')) {

    // 1
    if (response.test === 1) {
        alert('is true');
    }

    // 2
    if (response.test) {
        alert('is true');
    }

    // 3
    if (response.test == true) {
        alert('is true');
    }

    // 4
    if (Boolean(response.test) === true) {
        alert('is true');
    }

    // 5
    if (response.test == 1) {
        alert('is true');
    }
}

如前所述,这主要是基于意见的

然而,有一些利弊取决于您使用的方法

首先,上下文很重要:如果是你自己编写的代码,或者是与其他开发人员合作的项目;如果你也在后端写了,因此你有控制权,等等

一般来说,如果它是我控制的东西,而不是生产代码,我可能会选择第二种形式:足够快,足够清晰-它是真实的或虚假的-我确信从后端返回的值是0和1是有原因的

在所有其他场景中,我会选择严格相等,因此第一种形式:它更明确。阅读第二种形式,我唯一知道的是,价值可以是真实的,也可以是虚假的,我不知道实际价值是什么。如果API中有任何更改-例如,因为我无法直接控制它,或者可能是其他人在项目中更改了它并忘记了这段代码-代码将失败。例如:

if (response.test === 1) {
  // do something
} else if (response.test === 0) {
  // do something else or do nothing
} else {
  throw new Error("Unexpected value from response.test")
}
即使您没有
,如果API添加一个新值,否则
就足够安全了。例如,假设API现在可以返回0、1或3。如果检查真实值,1和3将相等。但如果你有:

if (response.test === 1) {
  // do something
} else if (response.test === 0) {
  // do something else or do nothing
}

你很好;即使扩展了API,您的代码仍能正常工作。

这是基于意见的。选择一个适合您的代码,并为其他条件保留此逻辑。如果可能,请始终使用严格的相等比较IMO:1。当
.test
是真实的时,第4个将通过,但不是1,这可能会导致意外的结果。我会选择第1个,这样就很清楚了,如果响应发生变化,您在将来会很快失败。AJAX请求通常遵循定义各种值类型的协议,所以在这些情况下,最好检查严格的平等性。例如,如果由于错误,
response
对象根本没有名为
test
的成员,那么
if(alert.test)
将简单地计算为false,这可能会产生误导。
response.hasOwnProperty('test')
不确定您为什么需要它,无论您选择什么选项。。