我在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语句正确,这是对其进行编码的最佳方式吗?
答案 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')相同