Javascript:使用0和1数字进行真假比较

时间:2018-05-25 08:45:56

标签: javascript

使用ajax请求时,如果响应属性为1(类型:数字)为true或0(类型:数字)为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');
    }
}

1 个答案:

答案 0 :(得分:1)

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

然而,有一些赞成和缺点取决于你正在使用的方法。

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

一般来说,如果它是我控制的东西并且它不是生产代码,我可能会选择第二种形式:足够快,足够清晰 - 它是真实的还是假的 - 而且我确信从...返回的值后端是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")
}

即使您没有else,如果API会添加新值,也会足够安全。例如,假设现在API可以返回0,1或3.如果检查truthy值,则1和3将等于。但如果你有:

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

你很好;即使扩展了API,您的代码仍将按预期工作。