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)

andypop 13.05.2020 13:06

true || undefined // true
 
Поясните пожалуйста почему?
var a=false
var b=true
var c=undefined
console.log((a || c)) //undefined
console.log((b || c))//true

Nexus 13.05.2020 13:23

https://learn.javascript.ru/logical-operators

andypop 13.05.2020 13:42

Это приводит к
console.log((a || c)!=(c || a)) //true

Nexus 13.05.2020 14:15

Цитата:

Сообщение от andypop
Это приводит к

«Это» - это что?

andypop 13.05.2020 15:35

Цитата:

Сообщение от Malleys
Потому что булевы операторы предназначены для работы с булевыми значениями. А ваш var c=undefined не является булевым значением.

Т.е. в случае console.log((b || c)) // true является,
а в случае console.log((a || c)) // внезапно undefined

даже не false! Это просто фича такая:)

andypop 13.05.2020 15:43

Я к чему это написал, что правильнее было бы сделать оба выражения учитывающих только операнды со значением , либо если один из операндов undefined, то и всё выражение тоже undefined

MallSerg 13.05.2020 17:24

Цитата:

Сообщение от andypop (Сообщение 524188)
Я к чему это написал, что правильнее было бы сделать оба выражения учитывающих только операнды со знанием , либо если один из операндов undefined, то и всё выражение тоже undefined

Нет это чушь.
Правильно придерживаться спецификации языка
где операции над операндами совершаются согласно описанию
а приоритет операций согласно таблице приоритетов.

То что ты считаешь правильным поломает логику работы языка и приведет к различному поведению в различных ситуациях.

andypop 13.05.2020 18:59

Нельзя поломать то, что уже поломано. И именно в булевых выражениях.
1+ undefined и undefined+1 даст одно и то же NaN. С точки зрения логики ассоциативность в языке не должна влиять на результат булевых выражений . Так что не чушь.

MallSerg 13.05.2020 20:00

Ну так и используй плюс.
У логического или другой алгоритм работы.
Именно по этому плюс и возвращает NaN
А логическое "или" первое истинное значение из операндов.

andypop 14.05.2020 15:14

Цитата:

Может вам нужно просвещение, что undefined — это не булево значение!
Вот именно. Как допустили, что не булево незначение участвует и влияет причем весьма странным образом в булевых операциях?


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