Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   true || undefined // true (https://javascript.ru/forum/misc/80242-true-%7C%7C-undefined-true.html)

laimas 15.05.2020 11:22

Цитата:

Сообщение от voraa
это не спецификация, а только ее трактовка

То есть о приоритетах это выдумка? :) Так что или чем тогда определяется порядок выполнения операторов, а также что такое в случае операторов с одинаковым приоритетом (примечание: термин имеет статус нелегального)?

Malleys 15.05.2020 11:26

Цитата:

Сообщение от 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)

laimas 15.05.2020 11:41

Цитата:

Сообщение от Malleys
В спецификации указаны правила разбора выражении рядом с алгоритмом выполнения

Вот тут вопрос - то что описано в спецификации верно по смыслу тому, что поясняется терминами "приоритет" и "ассоциативность" или же эти термины далеки от истины и нужно следовать "букве закона" отбросив их?

voraa 15.05.2020 13:16

Цитата:

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

Цитата:

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

Вот с этим четким алгоритмом и надо действовать.
В нем ничего не говорится, что если типы одинаковы, то есть ассоциативность, а если разные то ассоциативности нет...
Просто есть алгоритм, как выполняется операция с учетом возможных типов

voraa 15.05.2020 14:10

Цитата:

Сообщение от laimas
Вот тут вопрос - то что описано в спецификации верно по смыслу тому, что поясняется терминами "приоритет" и "ассоциативность" или же эти термины далеки от истины и нужно следовать "букве закона" отбросив их?

Приоритет определяется грамматикой языка.
Но про ассоциативность в программировании просто говорить бессмысленно. Так же, как и про коммутативность.
a+(b+c) == (a+b)+c ?
a+b == b+a ?
Когда как.
Мы же не знаем, что такое а, b, c.
А может быть это вызовы функций с побочным эффектом?
Просто есть правила выполнения операций.
a * b
Вычисли а, приведи к числовому типу
Вычисли b, приведи к числовому типу
(именно в такой последовательности, а не наоборот)
Результаты арифметически перемножь

laimas 15.05.2020 14:25

Цитата:

Сообщение от voraa
Приоритет определяется грамматикой языка.

И что это означает, определен ли в JS приоритет операторов? Учебники, справочные материалы языка оперируют именно приоритетом и ассоциацией операторов, и не просто рассказывают, а определены таблицей приоритетов. Тогда тут либо игра слов, либо упираемся рогом и не пяди не отдадим, либо то что заложено в сами понятия приоритет и ассоциация в JS не приемлемо и гарантированно будет порождать ошибки. Так что такое тогда приоритет и ассоциация в контексте операторов?

andypop 15.05.2020 15:16

Malleys всё чётко объяснил, зачем это мозгоблудие? И приоритет есть для операндов и ассоциативность. Все дело именно в применение toBoolean. для js оно такое. Возможно что-то похожее есть и в др. языках. Давайте закруглять тему.


Часовой пояс GMT +3, время: 20:19.