Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.04.2011, 17:32
Аспирант
Отправить личное сообщение для ILL-JAH Посмотреть профиль Найти все сообщения от ILL-JAH
 
Регистрация: 24.03.2011
Сообщений: 93

Опыты с NaN. В чём прикол.
Не могу понять, почему не срабатывает if когда checkNum - NaN.
Способ "от противного", ессно, работает.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Test</title>
    <script type="text/javascript">
        function superFunction() {
            var curValue = document.getElementById("input1").value;
            var checkNum = Number(curValue);
            //alert(checkNum); //Если curValue не число - выводит NaN
            var xNaN = Number("NaN");
            //alert(xNaN); //Выводит NaN

            // не работает
            if (checkNum == 'NaN') alert("'== NaN'");
            if (checkNum == "NaN") alert('"== NaN"');
            if (checkNum === 'NaN') alert("'=== NaN'");
            if (checkNum === "NaN") alert('"=== NaN"');
            if (checkNum == xNaN) alert("checkNum == xNaN");
            if (checkNum === xNaN) alert("checkNum === xNaN");

            // Способ "от противного"
            var checkStr = curValue - 0;
            if (checkNum == checkStr) alert(checkNum);
            else alert("не число");
        }
    </script>
</head>
<body>
<div>
<input id="input1" type="text" value=""/>
<input id="button" type="button" value="кнопка" onclick="superFunction()"/>
</div>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 05.04.2011, 17:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

NaN это такое число, которое ничему не равно, даже самому себе.
if (isNaN(checkNum)) {
    alert('NaN');
}
Ответить с цитированием
  #3 (permalink)  
Старый 05.04.2011, 18:16
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Кстати, window.undefined можно переопределить, поэтому не рекомендуется проверять
if(x == undefined)
Но с undefined - это не проблема, потому что есть более граммотные способы. А что делать с переопределенным isNaN?
isNaN = function(){ alert('lol'); };
isNaN( Number('a') );

UPD: Есть такой вариант бороться с этим безобразием:
function myIsNaN( value ){
  if( ( typeof value === 'number' || value instanceof Number ) && String( value ) !== 'NaN' ) return false;
  return true;
};

Последний раз редактировалось Sweet, 05.04.2011 в 18:29.
Ответить с цитированием
  #4 (permalink)  
Старый 05.04.2011, 18:27
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Sweet
window.undefined можно переопределить
Сообщение от Sweet
А что делать с переопределенным isNaN
любишь создавать себе проблемы и мужественно их решать?
Ответить с цитированием
  #5 (permalink)  
Старый 05.04.2011, 19:22
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

" прикольные замечания. жалко,что бесполезные " © ктото из тех,кто мне поставил плюсик за тему
Ответить с цитированием
  #6 (permalink)  
Старый 05.04.2011, 19:23
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,028

Сообщение от Sweet Посмотреть сообщение
А что делать с переопределенным isNaN?
О боже, о боже, а что делать с переопределённым getElementById?)))
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 05.04.2011, 19:29
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Цитата:
Number ) && String( value )
А если String/Number переопределёны? Ой бида-бида...
Ответить с цитированием
  #8 (permalink)  
Старый 05.04.2011, 19:30
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Мужики, вы слишком серьезные!
Ответить с цитированием
  #9 (permalink)  
Старый 05.04.2011, 20:40
Аспирант
Отправить личное сообщение для ILL-JAH Посмотреть профиль Найти все сообщения от ILL-JAH
 
Регистрация: 24.03.2011
Сообщений: 93

Сообщение от Kolyaj Посмотреть сообщение
NaN это такое число, которое ничему не равно, даже самому себе.
Млин, точно. Как я про всё это забыл? Пойду "курить".
Ответить с цитированием
  #10 (permalink)  
Старый 05.04.2011, 20:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Sweet
А что делать с переопределенным isNaN?
Прочитать ещё раз
Сообщение от Kolyaj
NaN это такое число, которое ничему не равно, даже самому себе.
и написать свою isNaN
function isNaN(n) {
    return n != n;
}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт не работает в FF и опера, но работает в IE(в чем дело???) Cepera Firefox/Mozilla 1 24.08.2012 16:46
Date и IE8, получаем NaN Nihisil Общие вопросы Javascript 1 05.04.2011 14:13
В поле выходит NAN Боря_Михалыч Общие вопросы Javascript 20 04.10.2010 17:05