Valor no numérico

Este método es parecido a la función global isNaN() del objeto Object, pero añade una segunda condición, que el argumento sea tipo number.

¿Que es un valor NaN? Para este método es todo lo que es numérico pero no representable.

En resumen el método Number.isNaN(arg) devuelve true solo si es un valor NaN y es de tipo Number.

Para ver la diferencia aplicamos ambos métodos a diferentes variables

var valor;

console.log("tipo "+typeof(valor));

console.log("isNaN(valor) ¿ No Numérico?: "+ isNaN(valor));

console.log("Number.isNaN(valor) ¿No Numérico?: "+ Number.isNaN(valor));

En esta situación la variable no está definida, asi pues isNaN da true, la variable es un valor undefined, sin embargo Number.isNaN resutla en false, considera undefined un posible valor de un tipo number

var valor=2.345;

console.log("tipo "+typeof(valor));

console.log("isNaN(valor) ¿ No Numérico?: "+ isNaN(valor));

console.log("Number.isNaN(valor) ¿No Numérico?: "+ Number.isNaN(valor));

En este caso isNaN devuelve false porque es un número, y es un objeto number, por tanto Number.isNaN devuelva también false

var valor = "2.345";

console.log("Tipo: "+typeof(valor));

console.log("isNaN(valor) ¿ No Numérico?: "+ isNaN(valor));

console.log("Number.isNaN(valor) ¿No Numérico?: "+ Number.isNaN(valor));

Igual que antes, isNaN hace una conversión interna y convierte el string valor en un número, y devuelve false. Por tanto Number.isNaN tiene que devolver false

var valor="cadena";

console.log(typeof(2*valor));

console.log("isNaN(2*valor) ¿ No Numérico?: "+ isNaN(2*valor));

console.log("Number.isNaN(2*valor) ¿No Numérico?: "+ Number.isNaN(2*valor));

Ahora ambos dan como resultado true. Está claro que esa operación no puede dar un resultado numérico, así que isNaN devuelve true. Pero el resultado es tipo number Number.isNaN devuelve true.