我将向您展示我的应用程序的一小部分,我想知道哪个是正确处理条件的正确方法。如果我向你展示的两种方式都是正确的,我希望你告诉我后果/逆境
if ((some.thing === '' || 0) || (some.how === '' || 0)) {
//something is going on here
}
到目前为止,我就是这样,有什么不好的吗?
或者应该这样更好:
if ((some.thing === '' || some.thing === 0) || (some.how === '' || some.how === 0)) {
//something is going on here
}
那你的建议是什么?最后会得到相同的结果吗?
修改
添加另一种方式:
if (some.thing === '' || some.thing === 0 || some.how === '' || some.how === 0) {
//something is going on here
}
答案 0 :(得分:3)
||
运算符优先于比较运算符。
因此some.thing === '' || 0
与(some.thing === '') || (0)
相同。它:
0
为some.thing === ''
或,false
如果true
为some.thing === ''
,true
。查看此示例(在JavaScript控制台中运行):
> some = { thing: 0 }
Object { thing: 0 }
> some.thing === ''
false
> some.thing === '' || 0 // this is like false || 0
0
> some = { thing: '' }
Object { thing: "" }
> some.thing === ''
true
> some.thing === '' || 0 // this is like true || 0
true
喜欢你写的最后一个表达式。
编辑:实际上JavaScript中的''
和0
都是falsy,因此您只需将完整的表达式编写为:
if (!some.thing || !some.how) {
//something is going on here
}
答案 1 :(得分:1)
这部分对我来说很可疑:
some.thing === '' || 0
你的意思是:
some.thing === '' || some.thing === 0
0
始终是假的,因此表达式some.thing === '' || 0
始终等同于some.thing === ''
修改强>
您需要最终表达式:
(some.thing === '' || some.thing === 0 || some.how === '' || some.how === 0)
答案 2 :(得分:0)
||
与SQL的IN
子句不同。基本上这就是你在做的事情:
someBoolean || 0
所以它永远不会将some.thing
与类型安全相等与Number
0
进行比较。
答案 3 :(得分:0)
在你的第一个例子中,你基本上是这样做的:
if ((condition1 || condition2) || (condition3 || condition4))
现在条件1和条件3可以是真或假,取决于some.thing和some.how的内容是什么,但条件2和4将始终为假(0为假),所以基本上你所说的是:
if (condition1 || condition3)
你的第二个例子:
if (condition1 || condition2 || condition3 || condition4)
你的第三个例子,看起来更像是这样:
if ((condition1 || condition2) || (condition3 || condition4))
现在所有这些都可能是假的或真的(对于第二和第三个例子)。
请记住,例如,如果某些东西是''而some.how是'某事'则整套条件都将成立。
答案 4 :(得分:0)
使用第二个代码段。第一个代码段无效,因为
if ((some.thing === '' || 0) || (some.how === '' || 0)) {
//something is going on here
}
拳头评估some.thing === ''
哪个可以为假,然后返回此结果或为假,所以你的代码终于
if (some.thing === '' || some.how === '') {
//something is going on here
}