Визуализация того, что происходит, может помочь с точки зрения понимания приоритета:
Второй оценивается так:
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
, но вы могли бы установить его на что-нибудь еще.В идеале наименьший возможный размер значения, но если он понадобится вам для чего-то еще позже в вашем коде, вы можете полностью использовать эту структуру!