Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 31.01.2010, 13:37
Аватар для Niar
Труъ кодер
Отправить личное сообщение для Niar Посмотреть профиль Найти все сообщения от Niar
 
Регистрация: 20.01.2010
Сообщений: 194

Логично
__________________
http://www.free-lance.ru/users/Nia173 Мой аккуант на free-lance.
Ответить с цитированием
  #22 (permalink)  
Старый 31.01.2010, 14:52
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

Сообщение от Niar Посмотреть сообщение
if (new String('')==false) alert('равно')
Ну а тут false то почему
if (new String('')) - здесь объект сразу приводится к логическому, и по правилам это true
if (new String('')==false) - а тут работает оператор == и правила его работы - особенные (стр 85 все подробно описано)
Ответить с цитированием
  #23 (permalink)  
Старый 31.01.2010, 16:00
Аватар для Niar
Труъ кодер
Отправить личное сообщение для Niar Посмотреть профиль Найти все сообщения от Niar
 
Регистрация: 20.01.2010
Сообщений: 194

Да я их даже в тетрадку переписал дня 3 назад. Просто сразу не вкупил
__________________
http://www.free-lance.ru/users/Nia173 Мой аккуант на free-lance.
Ответить с цитированием
  #24 (permalink)  
Старый 31.01.2010, 16:11
Аватар для Мараторий
Кандидат Javascript-наук
Отправить личное сообщение для Мараторий Посмотреть профиль Найти все сообщения от Мараторий
 
Регистрация: 22.01.2010
Сообщений: 114

Сообщение от micscr Посмотреть сообщение
if (new String('')) - здесь объект сразу приводится к логическому, и по правилам это true
if (new String('')==false) - а тут работает оператор == и правила его работы - особенные (стр 85 все подробно описано)
Я вот чего не очень понимаю. Зачем при сравнении чего-либо с логическим выражением надо это логическое выражение приводить к числу, а не сравниваемый объект приводить к логическому выражению?
Тогда эти две операции были бы эквивалентны:
if(expr) ...
// и
if(expr == true) ...
А в действительности получается, что они не эквивалентны.
Ответить с цитированием
  #25 (permalink)  
Старый 31.01.2010, 16:12
Аватар для Niar
Труъ кодер
Отправить личное сообщение для Niar Посмотреть профиль Найти все сообщения от Niar
 
Регистрация: 20.01.2010
Сообщений: 194

А зачем две эквивалентных операции?
__________________
http://www.free-lance.ru/users/Nia173 Мой аккуант на free-lance.
Ответить с цитированием
  #26 (permalink)  
Старый 31.01.2010, 16:23
Аватар для Мараторий
Кандидат Javascript-наук
Отправить личное сообщение для Мараторий Посмотреть профиль Найти все сообщения от Мараторий
 
Регистрация: 22.01.2010
Сообщений: 114

Сообщение от Niar Посмотреть сообщение
А зачем две эквивалентных операции?
Ну как зачем? По логике вещей эти две операции должны делать одно и то же. Вам так не кажется?
В первый раз я говорю: если выражение правда, то сделать то-то.
Во второй раз я говорю: если выражение равно правде, то сделать то-то.
По мне так это одно и то же.
Ответить с цитированием
  #27 (permalink)  
Старый 31.01.2010, 16:24
Аватар для Niar
Труъ кодер
Отправить личное сообщение для Niar Посмотреть профиль Найти все сообщения от Niar
 
Регистрация: 20.01.2010
Сообщений: 194

Нет не кажется
__________________
http://www.free-lance.ru/users/Nia173 Мой аккуант на free-lance.
Ответить с цитированием
  #28 (permalink)  
Старый 31.01.2010, 16:31
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

Сообщение от Мараторий Посмотреть сообщение
Я вот чего не очень понимаю. Зачем при сравнении чего-либо с логическим выражением надо это логическое выражение приводить к числу, а не сравниваемый объект приводить к логическому выражению?
Может потому что оператор == изначально нацелен именно на определение равенства разнотипных элементов. И если приводить сложные типы данных сразу к логическому значению теряется много вариантов.
Ведь тут new String('')==false получается: сначала false в 0 потом объект в пустую строку и пустая строка в 0.
Не забываем что своим объектам можно переопределять метод valueOf и кто знает тогда как он будет сравниваться например со строкой или числом.
Ответить с цитированием
  #29 (permalink)  
Старый 31.01.2010, 16:38
Аватар для Мараторий
Кандидат Javascript-наук
Отправить личное сообщение для Мараторий Посмотреть профиль Найти все сообщения от Мараторий
 
Регистрация: 22.01.2010
Сообщений: 114

Сообщение от micscr Посмотреть сообщение
Может потому что оператор == изначально нацелен именно на определение равенства разнотипных элементов. И если приводить сложные типы данных сразу к логическому значению теряется много вариантов.
Ведь тут new String('')==false получается: сначала false в 0 потом объект в пустую строку и пустая строка в 0.
Не забываем что своим объектам можно переопределять метод valueOf и кто знает тогда как он будет сравниваться например со строкой или числом.
Убедили. Все встало на свои места.

Сообщение от Niar Посмотреть сообщение
Написали же=) Оператор == нацелен на сравнение различных типов данных.
Предыдущий пост я удалил. Я его писал до того, как это прочел.
Ответить с цитированием
  #30 (permalink)  
Старый 31.01.2010, 17:42
Аватар для Niar
Труъ кодер
Отправить личное сообщение для Niar Посмотреть профиль Найти все сообщения от Niar
 
Регистрация: 20.01.2010
Сообщений: 194

Почему в литерале объекта
{L:function(){}}
и
{"L":5}

syntax error, а
var bla={L:function(){}}

и
var bla={"L":5}

нету ошибки?
__________________
http://www.free-lance.ru/users/Nia173 Мой аккуант на free-lance.

Последний раз редактировалось Niar, 31.01.2010 в 17:49.
Ответить с цитированием
Ответ



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

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