这两个语句之间有什么区别?

时间:2019-09-23 13:02:42

标签: javascript if-statement conditional-statements

这有什么区别?

if(codons[i] == "UCU" || codons[i] ==  "UCC"|| codons[i] ==  "UCA"|| codons[i] ==  "UCG")

和:

if(codons[i] == "UCU" || "UCC"|| "UCA"||"UCG")

如何解释每个语句的逻辑是什么?有没有一种方法可以写一个if语句,如果条件是1或2或3或4,而不必每次都重复密码子[i] ==?

5 个答案:

答案 0 :(得分:1)

可视化发生的事情有助于理解优先级:

第二个评估如下:

if ((codons[i] == "UCU") || ("UCC")|| ("UCA") || ("UCG"))

在任何情况下,如果codons[i]不等于"UCU",它将停止进行第二个条件检查"UCC",因为任何长度大于0的字符串,永远是真实的。

如果要检查多种情况而不必每次都写codons[i],则有几种方法可以做到。


第一种方法,足以检查有限数量的值:数组!

// somewhere before the loop
var allowedValues = ['UCU', 'UCC', 'UCA', 'UCG'];
// ...
// somewhere within the loop
if (allowedValues.indexOf(codons[i]) != -1) {
    // codons[i] matches one of the values!
}

现在,仅当您计划使用具有很多值的此功能时-为了清楚起见,假设为一百万。您可能要考虑提高性能,因为对于循环的每次迭代,它都有可能循环一百万次以查找单个值。

当然,在两种情况下(使用数组或使用 该解决方案)...任何人,这都是关于对象文字的。

// somewhere before your loop
var allowedValues = {
    UCU: null,
    UCC: null,
    UCA: null,
    UCG: null,
    // a lot more values...
};

// somewhere inside your loop
if (allowedValues.hasOwnProperty(codons[i])) {
    // codons[i] exists!
}

请注意,我们在对象中关心的所有值只是,我将值设置为null,但您可以将其设置为其他任何值。理想情况下,可能的值的最小大小,但是如果以后在代码中需要它时,可以完全重用该结构!

答案 1 :(得分:1)

用通俗易懂的话说,与人类不同,在与计算机交谈时,必须始终在所有条件下重复主题。

对于人类,您可以说:“从此框中取所有颜色为蓝色,绿色或红色或黄色的球”

这就是你对计算机说的话:

if (color == "blue" || color == "green" || color == "red" || color == "yellow") {
    // Add ball to basket
}

任何非空值(当然不是false)在条件表达式中的计算结果为true。

所以:

if (color == "blue" || "green" || "red" || "yellow") {

}

相同
if (color == "blue" || true || true || true) {

}

答案 2 :(得分:0)

第一句话很明显。

如果codons[i] == "UCU" or codons[i] == "UCC" or ....,请执行某些操作。

第二条语句表示condition = false then do something。例如,如果codons[i] == "UCU" || "UCC"表示condons [i]等于“ UCU”,则返回“ UCC”。链接||将返回最后一条错误语句之后的最后一个值。

5 === 2 || 3 > 10 || 'some text'将返回some text

5 === 2 || 3 > 10 || 'some text' || 'more text'也将返回some text,因为'some text'条件被评估为true,因此不会显示more text

如果您写5 === 2 || 3 > 10 || 'some text' && 'more text'将返回more text

因此,这是一系列条件,与第一个条件类似,但是在这种情况下,将评估条件是否为假。一个接一个地。但是您遇到的问题是,以'UCU'的形式求值的字符串将始终返回true

console.log(5 === 2 || 3 > 10 || 'some text')
console.log(5 === 2 || 3 > 10 || 'some text' || 'more text' )
console.log(5 === 2 || 3 > 10 || 'some text' && 'more text')

答案 3 :(得分:0)

现在我明白了,谢谢您的回答。这是我不明白的概念。

基本上,您阅读||。这样:

如果条件1或(||)条件2或条件3。

我正在这样阅读它:

如果条件= 1或2或3

答案 4 :(得分:0)

所以你问

是否可以编写条件是否为1或2或3或4的if语句,而不必每次都重复密码子[i] ==?

是:

if (["UCU","UCC","UCA","UCG"].indexOf(codons[i]) !=-1) ...