Опыты с 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> |
NaN это такое число, которое ничему не равно, даже самому себе.
if (isNaN(checkNum)) { alert('NaN'); } |
Кстати, window.undefined можно переопределить, поэтому не рекомендуется проверять
if(x == undefined)Но с undefined - это не проблема, потому что есть более граммотные способы. А что делать с переопределенным isNaN?:D 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; }; |
Цитата:
Цитата:
|
" прикольные замечания. жалко,что бесполезные " © ктото из тех,кто мне поставил плюсик за тему
|
Цитата:
|
Цитата:
|
Мужики, вы слишком серьезные!:)
|
Цитата:
|
Цитата:
Цитата:
function isNaN(n) { return n != n; } |
Часовой пояс GMT +3, время: 09:15. |