这有什么区别?
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] ==?
答案 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) ...