isNaN se nerovná Číslo.isNaN

Minulý týden jsem byl na dovolené a četl jsem Exploring ES6 od Axela Rauschmayera. A nemůžu to říct dost – je to skvělé čtení a neustále se dozvídám nové drobné detaily o JavaScriptu. Vřele doporučuji vyzkoušet!

ES6 už dnes není nic nového a všichni mluvili/mluvili o nových lesklých funkcích, ale existuje mnohem více jako nová metoda Number.isNaN a další nedůležité vypadající doplňky.

Jak je to tedy s touto novou metodou? Globální funkci isNaN jsme již měli , nebo?

Jak tedy obvykle zjistíte, zda je hodnota NaN ? Ukazuje se, že je to těžší, než si myslíte, protože globální funkce není velká pomoc...

isNaN('foo'); // true
isNaN({});    // true
isNaN(NaN);   // true
isNaN(12);    // false

Pomocí globálního isNaN existuje mnoho falešně pozitivních výsledků, a proto jsem léta prováděl kontrolu rovnosti.

function myOwnIsNaN(value) {
  return value !== value;
}

To funguje, protože NaN není sobě rovné.

Nová statická metoda Number.isNaN opravuje zvláštní chování a ve skutečnosti funguje tak, jak byste to očekávali.

Number.isNaN('foo'); // false
Number.isNaN(12);    // false
Number.isNaN({});    // false
Number.isNaN(NaN);   // true 🎉

Skvělé, to se mi líbí!