使用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');
}
}
答案 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,您的代码仍将按预期工作。