Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.05.2020, 13:06
Аспирант
Отправить личное сообщение для andypop Посмотреть профиль Найти все сообщения от andypop
 
Регистрация: 15.02.2014
Сообщений: 32

true || undefined // true
Поясните пожалуйста почему?
var a=false
var b=true
var c=undefined
console.log((a || c)) //undefined
console.log((b || c))//true
Ответить с цитированием
  #2 (permalink)  
Старый 13.05.2020, 13:23
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,706

https://learn.javascript.ru/logical-operators
Ответить с цитированием
  #3 (permalink)  
Старый 13.05.2020, 13:42
Аспирант
Отправить личное сообщение для andypop Посмотреть профиль Найти все сообщения от andypop
 
Регистрация: 15.02.2014
Сообщений: 32

Это приводит к
console.log((a || c)!=(c || a)) //true
Ответить с цитированием
  #4 (permalink)  
Старый 13.05.2020, 14:15
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,706

Сообщение от andypop
Это приводит к
«Это» - это что?
Ответить с цитированием
  #5 (permalink)  
Старый 13.05.2020, 15:35
Аспирант
Отправить личное сообщение для andypop Посмотреть профиль Найти все сообщения от andypop
 
Регистрация: 15.02.2014
Сообщений: 32

Сообщение от Malleys
Потому что булевы операторы предназначены для работы с булевыми значениями. А ваш var c=undefined не является булевым значением.
Т.е. в случае console.log((b || c)) // true является,
а в случае console.log((a || c)) // внезапно undefined

даже не false! Это просто фича такая
Ответить с цитированием
  #6 (permalink)  
Старый 13.05.2020, 15:43
Аспирант
Отправить личное сообщение для andypop Посмотреть профиль Найти все сообщения от andypop
 
Регистрация: 15.02.2014
Сообщений: 32

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

Последний раз редактировалось andypop, 13.05.2020 в 19:03.
Ответить с цитированием
  #7 (permalink)  
Старый 13.05.2020, 17:24
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

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

То что ты считаешь правильным поломает логику работы языка и приведет к различному поведению в различных ситуациях.
Ответить с цитированием
  #8 (permalink)  
Старый 13.05.2020, 18:59
Аспирант
Отправить личное сообщение для andypop Посмотреть профиль Найти все сообщения от andypop
 
Регистрация: 15.02.2014
Сообщений: 32

Нельзя поломать то, что уже поломано. И именно в булевых выражениях.
1+ undefined и undefined+1 даст одно и то же NaN. С точки зрения логики ассоциативность в языке не должна влиять на результат булевых выражений . Так что не чушь.
Ответить с цитированием
  #9 (permalink)  
Старый 13.05.2020, 20:00
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

Ну так и используй плюс.
У логического или другой алгоритм работы.
Именно по этому плюс и возвращает NaN
А логическое "или" первое истинное значение из операндов.
Ответить с цитированием
  #10 (permalink)  
Старый 14.05.2020, 15:14
Аспирант
Отправить личное сообщение для andypop Посмотреть профиль Найти все сообщения от andypop
 
Регистрация: 15.02.2014
Сообщений: 32

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно прочитать запрос? gsdev99 Node.JS 3 30.06.2019 04:15
Прошу раскритиковать наслойку работы с MySql. Alasdair Node.JS 4 21.11.2015 20:06
Глюк firebug'а trikadin Оффтопик 23 16.01.2012 14:04
относительная высота zmaxon ExtJS 13 04.10.2010 12:42
Правильный ответ или неправильный Kevrat Ваши сайты и скрипты 7 13.01.2010 21:31