JS - Если несколько условий могут быть истинными одновременно, какое из них выполняется? - PullRequest
0 голосов
/ 25 марта 2020

Если несколько операторов if могут быть истинными одновременно, как JS определяет, какой из них запустить? В приведенном ниже примере я знаю: «Круто, теперь у меня много начо». вернется, но мне просто интересно, как это определяется? Что если вместо friendsAtYourParty === 0 это будет friendsAtYourParty < 3 («Круто, теперь у меня много начо с собой». Вернется снова, но почему?). Я думал, может быть, тот, который более конкретно / ближе к значению "выигрывает"?


if (friendsAtYourParty === 0) {
  console.log("Cool, now I have a lot of nachos to myself.");
} else if (friendsAtYourParty < 4) {
  console.log("Perfect amount to play some Mario Kart.");
} else {
  console.log("Wooooo turn on the dance music!");
}

Ответы [ 3 ]

0 голосов
/ 25 марта 2020

Давайте рассмотрим значение friendsAtYourParty, равное 8

  1. if (friendsAtYourParty === 0) { // 8 == 0 возвращает false, поэтому оно пропускается этот блок

  2. console.log ("Круто, теперь у меня много начо для себя.");

  3. } else if (friendsAtYourParty <4) {<strong> // 8 <4 возвращает false, поэтому пропускает этот блок </strong>

  4. console.log ("Идеальное количество для игры в Mario Kart" . ");

  5. } else { // нет условия в else, поэтому, если все условия не будут выполнены в вышеуказанных блоках, он выполнит это

  6. console.log («Wooooo включите танцевальную музыку c!»);

  7. }

Давайте рассмотрим другой сценарий, в котором friendsAtYourParty имеет значение 0

  1. if (friendsAtYourParty === 0) { // 0 == 0 возвращает true, поэтому он запускается этот блок и выходит из цепочки if else и игнорирует все блоки в цепочке if else

  2. console.log («Круто, теперь у меня много начо».);

  3. } else if (friendsAtYourParty <4) {<strong> // 0 <4 возвращает true, но игнорируется </strong>

  4. console.log ("Идеальное количество для игры в Mario Kart.");

  5. } else { // это также игнорируется

  6. console.log ("Wooooo включите танцевальную музыку c!" );

  7. }

Нажмите Ctrl + shift + i, чтобы открыть инструменты разработчика, запустите следующий фрагмент и нажмите f19, чтобы go шаг за шагом, чтобы понять поток.

debugger
var friendsAtYourParty=8;
if (friendsAtYourParty === 0) {
  console.log("Cool, now I have a lot of nachos to myself.");
} else if (friendsAtYourParty < 4) {
  console.log("Perfect amount to play some Mario Kart.");
} else {
  console.log("Wooooo turn on the dance music!");
}
friendsAtYourParty=0;
if (friendsAtYourParty === 0) {
  console.log("Cool, now I have a lot of nachos to myself.");
} else if (friendsAtYourParty < 4) {
  console.log("Perfect amount to play some Mario Kart.");
} else {
  console.log("Wooooo turn on the dance music!");
}
0 голосов
/ 25 марта 2020

Если у вас есть if/else цепочка только , то будет выполнено первое совпадение if. В конце концов, вот как работает if/else:

if (condition) {
  //only executed when condition is true
} else {
  //only executed when condition is false 
}

Партия else НЕ будет выполняться при условии true. Ничто не изменится, если у вас более одной if/else:

if (condition1) {
  //only executed when condition1 is true
} else if (condition2) {
  //only executed when condition2 is true and condition1 is false
} else {
 //only executed when both condition1 and condition2 are false
}

Цепочка if/else описывает следующий логический c поток, поэтому он всегда будет предсказуемо оцениваться:

Flowchart describing the if/else chain

0 голосов
/ 25 марта 2020

В основном выполняется первое истинное условие. Это происходит потому, что код JS запускается и выполняется построчно. Когда механизм JS видит оператор if и условие ложно, он продолжает читать код. Когда он видит истинное условие, он выполняет оператор, объявленный после условия, а затем удаляет оператор if из стека вызовов. Другими словами: он не будет читать другие условия после того, как увидит истину. Он будет игнорировать их

...