通过特殊条件声明获得明确

时间:2015-06-17 23:10:39

标签: javascript

我将向您展示我的应用程序的一小部分,我想知道哪个是正确处理条件的正确方法。如果我向你展示的两种方式都是正确的,我希望你告诉我后果/逆境

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
}

5 个答案:

答案 0 :(得分:3)

||运算符优先于比较运算符。

因此some.thing === '' || 0(some.thing === '') || (0)相同。它:

    如果0some.thing === ''或,
  • 将评估为false 如果truesome.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
}