JavaScript вбудований в IsNaN функції, це - як і слід було очікувати , за замовчуванням - це «Динамічний тип оператора». Тому всі значення, які (під час процесу DTC) можуть дати просту правду | помилкові, такі як"", " ", " 000"
, не може бути NaN.
Це означає, що поданий аргумент спочатку зазнає перетворення, як у:
function isNaNDemo(arg){
var x = new Number(arg).valueOf();
return x != x;
}
Пояснення:
У верхньому рядку функції функції ми (спершу) намагаємось успішно перетворити аргумент в об'єкт числа. І (другий), з допомогою оператора точки ми - для власної зручності - негайно вирізують, примітивне значення створюваного об'єкта.
У другому рядку ми беремо значення, отримані на попередньому кроці, і перевага того, що NaN не дорівнює ні чомусь у Всесвіті, навіть самому собі, наприклад:NaN == NaN >> false
нарешті порівняти його (за нерівність) із самим собою .
Таким чином, повернення функції буде істинним лише тоді, коли і лише у тому випадку, якщо наданий аргумент-повернення є невдалою спробою перетворення на об'єкт числа, тобто число, яке не є числом; наприклад, NaN.
isNaNstatic ()
Однак для оператора статичного типу - якщо це потрібно і коли це потрібно - ми можемо написати набагато простішу функцію, таку як:
function isNaNstatic(x){
return x != x;
}
І уникайте DTC взагалі, так що якщо аргумент не є явно NaN-номером, він поверне помилковим. Тому тестування на наступне:
isNaNStatic(" x"); // will return false
бо це все-таки струна.
Однак:
isNaNStatic(1/"x"); // will of course return true.
як, наприкладisNaNStatic(NaN); >> true
.
Але всупереч тому isNaN
, isNaNStatic("NaN"); >> false
що це (аргумент) - це звичайний рядок.
ps: Статична версія isNaN може бути дуже корисною в сучасних сценаріях кодування. І це, можливо, є однією з головних причин, коли я витратив свій час на публікацію цього питання.
З повагою