Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

typeof NaN == number

12 réponses
Avatar
unbewusst.sein
je fais un Parsint sur "<" qui me donne NaN, normal.
si je regarde typeof du résultat ça me donne number.

on peut détecter NaN comment ?

par :
machin = parseInt("<", 10);
if(machin === NaN) {
faire ce qu'il faut...
}

???

--
« La vie est une fleur.
L'amour en est le miel. »
(Victor Hugo)

2 réponses

1 2
Avatar
Elegie
On 14/11/2011 09:03, Olivier Miakinen wrote :

Bonjour,

Il y a même une raison encore plus fondamentale, qui est que la fonction
isNaN() peut s'appliquer à des types de valeurs qui ne sont pas des
objets (les types primitifs undefined, null, boolean, number et string),
alors qu'une méthode de classe ou d'instance ne peut s'appliquer, par
définition, qu'à un type objet. Par exemple, tu ne peux pas exécuter
l'instruction 3.toString() !



Remarque judicieuse, mais comme javascript fournit un mécanisme
d'autoboxing, je ne suis pas sûr que ce problème pourrait se rencontrer
en réalité.

L'instruction 3.toString() échoue pour des raisons de grammaire
(l'opérateur "." attend la déclaration d'une partie décimale, ce n'est
pas, dans ce contexte, l'opérateur d'accès à une propriété); mais
l'instruction (3).toString() fonctionne en montant temporairement le
littéral 3 en new String(3).

Ainsi, on pourrait avoir:

---
Object.prototype.isNaN = function() {
return isNaN(this);
}

var tests = [
(3).isNaN(), // false
(false).isNaN(), // false
("a").isNaN(), // true
(new Object()).isNaN(), // true
];

alert(tests.join("n"));
---

Bonne journée,
Elegie.
Avatar
Olivier Miakinen
Le 14/11/2011 10:42, Elegie m'a répondu :

Il y a même une raison encore plus fondamentale, qui est que la fonction
isNaN() peut s'appliquer à des types de valeurs qui ne sont pas des
objets (les types primitifs undefined, null, boolean, number et string),
alors qu'une méthode de classe ou d'instance ne peut s'appliquer, par
définition, qu'à un type objet. Par exemple, tu ne peux pas exécuter
l'instruction 3.toString() !



Remarque judicieuse, mais comme javascript fournit un mécanisme
d'autoboxing, je ne suis pas sûr que ce problème pourrait se rencontrer
en réalité.



Ah oui, bien vu. Je ne connaissais pas le terme « autoboxing », mais je
suppose qu'il signifie « conversion implicite en objet ».

L'instruction 3.toString() échoue pour des raisons de grammaire
(l'opérateur "." attend la déclaration d'une partie décimale, ce n'est
pas, dans ce contexte, l'opérateur d'accès à une propriété); mais
l'instruction (3).toString() fonctionne en montant temporairement le
littéral 3 en new String(3).



Bien vu (bis).

Ainsi, on pourrait avoir:

---
Object.prototype.isNaN = function() {
return isNaN(this);
}

var tests = [
(3).isNaN(), // false
(false).isNaN(), // false
("a").isNaN(), // true
(new Object()).isNaN(), // true
];

alert(tests.join("n"));
---



Merci pour la correction, et pour les tests.

Cordialement,
--
Olivier Miakinen
1 2