Я хотел бы знать, если JavaScript имеет "короткое замыкание" оценки, как && Operator в С#. Если нет, я хотел бы знать, есть ли обходной путь, который имеет смысл принять.
У JavaScript есть оценка "короткого замыкания"?
Ответ 1
Да, JavaScript имеет оценку "короткого замыкания".
if (true == true || foo.foo){
    // Passes, no errors because foo isn't defined.
}
if (false && foo.foo){
    // Passes, no errors because foo isn't defined.
}
		Ответ 2
В этом ответе подробно рассказывается о том, как short-circuiting работает в JavaScript, со всеми хитростями и соответствующими темами, такими как приоритет операторов, если вы ищете быстрое определение и уже понимаете, как работает короткое замыкание, я бы порекомендовал проверка других ответов.
Что мы (думали мы) знали до сих пор:
 Сначала давайте проверим поведение, с которым мы все знакомы, внутри блока if(), где мы используем && чтобы проверить, true ли эти две вещи:
if (true && true) {
   console.log('bar');
} 
  Теперь ваш первый инстинкт, вероятно, говорит: "Да, довольно просто, код выполняет инструкцию, если и expr1 и expr2 оценены как true ".
Ну да и нет. Вы технически верны, это поведение, которое вы описали, но это не совсем то, как оценивается код, и нам нужно глубже вникнуть, чтобы полностью понять.
 Как именно это && и || интерпретированы?:
 Пришло время заглянуть "под капот двигателя javascript". Давайте рассмотрим этот практический пример:
function sanitise(x) {
  if (isNaN(x)) {
    return NaN;
  }
  return x;
}
let userinput = 0xFF; // as an example
const res = sanitise(userinput) && userinput + 5
console.log(res);