Показать сообщение отдельно
  #22 (permalink)  
Старый 15.05.2020, 11:26
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от voraa
Операции && и || не булевы, а логические. Так они названы в спецификации. Булевые операции подразумевали бы, что их операнды должны иметь тип boolean и выдавать такой же результат.
Булевы операции, или логические операции в первую очередь и предназначены для работы с булевым типом данных, или логическим типом данных. Это одно и тоже — Boolean или logical data type. Логический тип данных ещё называют булевым типом в честь английского математика и логика Джорджа Буля.

Сообщение от voraa
Операция + ни грамма не ассоциативная.
Опять же, вы не учитываете типы! Когда и правый и левый операнды имеют одинаковый тип (String, Number или BigInt соответственно), то выполняется ассоциативность. В спецификации указано, что операция + в конечном счёте производит конкатенацию строк или сложение чисел.

alert(("a" + "b") + "c" === "a" + ("b" + "c")); // true, поскольку ассоциативность выполняется
alert((1 + 2) + 3 === 1 + (2 + 3)); // true, поскольку ассоциативность выполняется
alert((1 + 1) + "1" === 1 + (1 + "1")); // false, вы конечно можете и тут подобрать true, но тут разные типы, это плохая практика — отстреливать себе ноги и играть с мухой без головы, понапихают разного рандомного говна в операнды, а потом сидят и задают тупые вопросы, типа а почему там нет ассоциативности!


Сообщение от laimas
Так что или чем тогда определяется порядок выполнения операторов
В спецификации указаны правила разбора выражении рядом с алгоритмом выполнения (Runtime Semantics: Evaluation)

Последний раз редактировалось Malleys, 15.05.2020 в 11:34.
Ответить с цитированием