如果在JavaScript中带括号的语句

时间:2018-12-13 14:35:46

标签: javascript

我在javascript文件中使用了非常简单的if语句。请参阅下面的示例。

我想知道它是否读取/显示如下内容:

if (var A === var B) && 
(var C truthy && (var C !== var D))

OR

(var A === var B) && 
(typeof var C ==='undefined' && (var C !== var D))

在我的代码中的语句下方:

if ((A === B) && (C && (C !== D) || typeof C ==='undefined' && (C !== D))) {
alert ('through'); }

这是否是if语句正确,这是对其进行编码的最佳方式吗?

3 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么您通常是在询问布尔逻辑,而不是JavaScript。

您有这个表达式,其中包含某些布尔子表达式,我们可以为其指定一个名称,如下所示:

   (A === B) && (C && (C !== D) || typeof C ==='undefined' && (C !== D))
// ----X----    (------Y-------    ----------------Z-------------------)

因此布尔表达式具有以下模式:

X && (Y || Z)

根据distributive law in boolean algebra,这等效于:

(X && Y) || (X && Z)

...这似乎就是您要问的。最后一个表达式中的括号是可选的,因为逻辑AND运算符的优先级高于逻辑OR运算符。

因此您的解释正确地反映了代码。

您的第二个问题是:

  

这是if条语句...对其进行编码的最佳方法吗?

由于C !== D出现在两个地方,因此该表达式等同于以下表达式,并再次应用分配律:

   A === B && C !== D && (C || typeof C === 'undefined')

答案 1 :(得分:0)

if (var A === var B) && (var c truthy && (var c !== var d))

翻译为

a === b && ( c && c !== d )

(var A === var B) && (typeof var c ==='undefined' && (var c !== var d))转换为

a === b && ( typeof(c) === 'undefined' && c !== d )

您可以合并这样的语句

if( a === b && ( c  || typeof(c) === 'undefined' ) && c !== d )
    alert ('through');

答案 2 :(得分:-3)

if ((a === b) && (c && (c !== b)

最后一个“ b”应为“ d”。否则if(c)和if(typeof c ==='undefined')相同