Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.07.2012, 10:44
Интересующийся
Отправить личное сообщение для dump Посмотреть профиль Найти все сообщения от dump
 
Регистрация: 14.07.2011
Сообщений: 26

Проблемы с преобразованием типов.
Скажите, почему следующий код:

alert('NaN'==NaN);
alert('undefined'==undefined);
alert('null'==null);

Во всех трёх случаях выводит false, хотя должен бы true....
И почему следующий код вообще ничего не выводит:
alert('dump'++);
alert(typeof d);
Ответить с цитированием
  #2 (permalink)  
Старый 04.07.2012, 10:50
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

http://javascript.ru/typeof
Ответить с цитированием
  #3 (permalink)  
Старый 04.07.2012, 13:47
Интересующийся
Отправить личное сообщение для dump Посмотреть профиль Найти все сообщения от dump
 
Регистрация: 14.07.2011
Сообщений: 26

Сообщение от Deff Посмотреть сообщение
http://javascript.ru/typeof
Ну и что? Всё равно не понятно....Объясните мне почему, например,
'NaN'==NaN не верно? NaN преобразуется в строку как 'NaN'. Тогда почему они не равны? Почему alert('dump'++); ничего не выводит, хотя никаких ошибок в консоль не выводится?
Ответить с цитированием
  #4 (permalink)  
Старый 04.07.2012, 14:21
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

dump, книжки нужно читать...
Цитата:
Еще одно специальное числовое значение возвращается JavaScript, когда мате
матическая операция (например, деление нуля на ноль) приводит к неопреде
ленному результату или ошибке. В этом случае результатом является специаль
ное значение «нечисло», обозначаемое как NaN. «Нечисло» (NotaNumber) ведет
себя необычно: оно не равно ни одному другому числу, в том числе и самому себе!
По данной причине для проверки на это значение имеется специальная функция
isNaN(). Похожая функция, isFinite(), позволяет проверить число на неравенст
во NaN или положительной/отрицательной бесконечности.
Цитата:
Ключевое слово null в JavaScript имеет специальный смысл. Обычно считается,
что у значения null объектный тип и оно говорит об отсутствии объекта. Значе
ние null уникально и отличается от любых других. Если переменная равна null,
следовательно, в ней не содержится допустимого объекта, массива, числа, стро
ки или логического значения.1
Цитата:
Еще одно специальное значение, иногда используемое в JavaScript, – undefined.
Оно возвращается при обращении либо к переменной, которая была объявлена,
но которой никогда не присваивалось значение, либо к свойству объекта, кото
рое не существует. Заметьте, что специальное значение undefined – это не то же
самое, что null.
Хотя значения null и undefined не эквивалентны друг другу, оператор эквива
лентности == считает их равными. Рассмотрим следующее выражение:
my.prop == null
Это сравнение истинно, либо если свойство my.prop не существует, либо если оно
существует, но содержит значение null. Поскольку значение null и undefined обо
значают отсутствие значения, это равенство часто оказывается тем, что нам
нужно. Однако когда действительно требуется отличить значение null от значе
ния undefined, нужен оператор идентичности === или оператор typeof (подробнее
об этом в главе 5).
В отличие от null, значение undefined не является зарезервированным словом
JavaScript. Стандарт ECMAScript v3 указывает, что всегда существует глобаль
ная переменная с именем undefined, начальным значением которой является зна
чение undefined. Следовательно, в реализации, соответствующей стандарту, un
defined можно рассматривать как ключевое слово, если только этой глобальной
переменной не присвоено другое значение.
Твои примеры, в некоем смысле, можно представить как

var test=0;
alert('test'==test);

Последний раз редактировалось ksa, 04.07.2012 в 14:27.
Ответить с цитированием
  #5 (permalink)  
Старый 04.07.2012, 15:35
Интересующийся
Отправить личное сообщение для dump Посмотреть профиль Найти все сообщения от dump
 
Регистрация: 14.07.2011
Сообщений: 26

Сообщение от Дзен-трансгуманист Посмотреть сообщение
Тип этих значений не приводится к строковому, чтобы не было холостых срабатываний.
Хотя alert('NaN'==NaN.toString()); будет true
Не совсем понятно, каких именно холостых срабатываний? Можете привести пример?

Цитата:
alert('dump'++); - пишет в консоль "Ошибка: invalid increment operand"
alert(typeof d); - выводит "undefined"
А вы какой программой пользуетесь для запуска скрипта? У меня в firebug'е и мозиле не выводится...
Ответить с цитированием
  #6 (permalink)  
Старый 05.07.2012, 01:54
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от dump
alert('NaN'==NaN);
Если в операторе "==" операнды число и строка, то строка перед сравнением приводится в число. В данном случае 'NaN' приводится к NaN, а оно не равно самому себе. В справочнике ошибка, там написано, что "если какой-либо операнд строка - второй преобразуются в строку", хотя это неверно.
Цитата:
alert('undefined'==undefined);
alert('null'==null);
При нестрогом сравнении undefined считается равным null, но эти значения не равны никакому другому значению.
Сообщение от dump
А вы какой программой пользуетесь для запуска скрипта? У меня в firebug'е и мозиле не выводится...
У меня в Firebug'е при выполнении alert('dump'++); выводит прямо в консоль "SyntaxError: invalid increment operand".

Последний раз редактировалось oneguy, 05.07.2012 в 02:23.
Ответить с цитированием
  #7 (permalink)  
Старый 05.07.2012, 13:48
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

ВНИМАНИЕ ПРАВИЛЬНЫЙ ОВТЕТ


Сообщение от dump
Скажите, почему следующий код:

alert('NaN'==NaN);
alert('undefined'==undefined);
alert('null'==null);

Во всех трёх случаях выводит false, хотя должен бы true....
потому что не undefined приводится к строке, а строка приводится к чему-то и undefined приводится к чем у то общему, пустая строка приведется к "false", не пустая строка приведется к "true", undefined приведется к false

ТИПА того


Сообщение от dump
alert('dump'++);
ошибка, строку нельзя увеличить на один

Сообщение от dump
alert(typeof d);
ошибка, переменная d не найдина

Последний раз редактировалось Drimogemon, 05.07.2012 в 13:52.
Ответить с цитированием
  #8 (permalink)  
Старый 05.07.2012, 15:59
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Drimogemon
Сообщение от dump
alert('dump'++);
ошибка, строку нельзя увеличить на один
var str = '1'; 
alert(str);
str++;
alert(str + '; ' + typeof(str))
str += '';
alert(str + '; ' + typeof(str))
Ответить с цитированием
  #9 (permalink)  
Старый 05.07.2012, 19:35
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

bes,
млять строку можно увеличить на один если она может преобразоваться к числу, не знаешь что ли как пост инкримент работает? очевидно же что имеется ввиду строка в значении "текст".

Последний раз редактировалось Drimogemon, 05.07.2012 в 19:37.
Ответить с цитированием
  #10 (permalink)  
Старый 05.07.2012, 20:10
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Drimogemon
ошибка, строку нельзя увеличить на один
Сообщение от Drimogemon
bes,
млять строку можно увеличить на один если она может преобразоваться к числу, не знаешь что ли как пост инкримент работает? очевидно же что имеется ввиду строка в значении "текст".
Здесь экстрасенсов мало, а очевидное иногда бывает далеко не очевидным, млякать вообще не стоит, здесь культурный форум (ну или я его себе таким представляю )
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы при установке модулей node.js tadjik1 AJAX и COMET 1 18.03.2012 02:20
Решение проблемы с отображением элементов на странице mozyr Javascript под браузер 17 13.01.2012 02:34
Проблемы с преобразованием строки в число onemore Общие вопросы Javascript 0 22.11.2011 18:22
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
Drug&Drop + всплывание события = проблемы =(( _NoName_ Events/DOM/Window 4 05.03.2009 17:47