Как работают бинарные логические операторы && и || в JavaScript? 
		
		
		
		Вот краткий пересказ своими словами из спецификации ECMAScript 2020 о том, как работают логические операторы. 
	ToBoolean ( аргумент ) Абстрактная операция ToBoolean принимает аргумент. Она преобразует аргумент в значение типа Boolean согласно следующей таблице: Код: 
	┌───────────────┬──────────────────────────────────────────────┐
 Когда вычисляется A || B, то происходит следующее... 
  | 
	
		
 Когда вычисляется A || B, то происходит следующее... 
	Если ToBoolean( A ) возвращает true, то вернуть A иначе вернуть B console.log((a || c)) //undefined Если результат 'с' которое undefined - false какого он возвращает undefined Согласно вашей же табличке результат вычисления 'c' в булевом выражении - false и общий результат должен быть false, а не undefined  | 
	
		
 Цитата: 
	
 var a=false var b=true var c=undefined console.log((a || c)) //undefined console.log((b || c))//true Я так понимаю (судя по коду выше), a || c у вас означает false || undefined . Смотрим... Когда вычисляется A || B, то происходит следующее... 
 Подстанавливаем ваше выражение, получается... Когда вычисляется (A = false) || (B = undefined), то происходит следующее... 
  | 
	
		
 Ну т.е. для булевых выражений работают правила, а не табличка, согласно которой если аргумент undefined ,то результат false 
	 | 
	
		
 Я вот и хотел, чтобы объяснили эту тонкость, а для булевых значений я в курсе. Речь идет об интерпретаторе, когда тип аргументов еще не известен. Можно использовать и правила js для toBoolean, но я против таких абстракций. фактически незначение undefined  приравнено к значению. Хотя по идее если от значения undefined зависит результат булевой операции нужно возвращать undefined. Понятно, что правила  сделаны в угоду синтаксису. Но ... 
	 | 
	
		
 Цитата: 
	
 Все операции выполняются так, как они записаны, с учетом лево или правосторонности. Операция + ни грамма не ассоциативная. 1+ "0" и "0" + 1 Операции && и || не булевы, а логические. Так они названы в спецификации. Булевые операции подразумевали бы, что их операнды должны иметь тип boolean и выдавать такой же результат. Цитата: 
	
 В JS есть тип undefined (такой же как Number, String, Boolean) с единственным значением undefined  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 В спецификации нет такого понятия.  | 
	
		
  | 
	
		
 mdn хорошая вещь.  
	Но это не спецификация, а только ее трактовка. Иногда не совсем полная.  | 
| Часовой пояс GMT +3, время: 16:39. |