typeof NaN == number

Le
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)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Elegie
Le #23947281
On 08/11/2011 22:50, Une Bévue wrote :

Hello,

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 ?



isNaN() ? :)

Bonne soirée!
unbewusst.sein
Le #23947651
Elegie
isNaN() ? :)

Bonne soirée!



F:A:N:T:A:S:T:T:I:Q:U:E !:!:!:!

il fallait y penser, c'est tellement compliqué...

))))

merci beaucoup !
--
« Il faut bien agiter le peuple avant de s'en servir »
(Talleyrand)
Dr J R Stockton
Le #23953161
En fr.comp.lang.javascript message <1kafrad.1ewyn6rts1jliN%unbewusst.sei
, Mardi, 8 Nov 2011 22:50:12, Une Bévue

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...
}



NaN est inégale à tout, même NaN. C'est pourquoi isNaN existe. Ou :

if (machin != machin) { // c'est peut-etre un peu plus vite
// ECMA 262 5.1 15.1.2.4 NOTE

Aussi, souvent, +S est egale a parseInt(S, 10).

Cordialement,

--
(c) John Stockton, nr London, UK. ?@merlyn.demon.co.uk Turnpike v6.05.
Website PAS EXE etc. : Dates - miscdate.htm estrdate.htm js-dates.htm pas-time.htm critdate.htm etc.
Une Bévue
Le #23953581
On 10/11/2011 21:33, Dr J R Stockton wrote:
NaN est inégale à tout, même NaN. C'est pourquoi isNaN existe. Ou :

if (machin != machin) { // c'est peut-etre un peu plus vite
// ECMA 262 5.1 15.1.2.4 NOTE



oui mais pourquoi est-ce une fonction (isNaN(an-expected-number)
plutôt qu'une mùéthode (an-expected-number.isNaN())

???
Elegie
Le #23954731
On 11/11/2011 07:17, Une Bévue wrote :

Hello,

oui mais pourquoi est-ce une fonction (isNaN(an-expected-number)
plutôt qu'une mùéthode (an-expected-number.isNaN())



Dans la mesure où isNaN peut être appliqué à n'importe quel objet, il
est plus judicieux d'en encapsuler la fonctionnalité à part, i.e. d'en
faire une méthode statique (qui applique un algorithme indépendant à un
argument donné) plutôt qu'une méthode d'instance (qui requiert un
contexte particulier pour fonctionner, i.e. l'instance elle-même).

Pour le formuler autrement, ajouter isNaN à tous les objets javascript -
par exemple en l'ajoutant sur le dernier objet de la chaîne des
prototypes, de façon à le rendre disponible pour tous les objets
javascript - est certainement possible, mais alourdirait d'autant les
fonctionnalités portées par cet objet (pollution de l'API).

Par ailleurs, que pensez-vous des deux affirmations suivantes:
- en javascript, toutes les fonctions peuvent être vues comme des
méthodes. Les fonctions déclarées globalement sont simplement des
méthodes de l'objet global.
- toutes les fonctions sont des objets, qui implémentent simplement une
interface "callable", qui les augmente de méthodes telles que "call",
"apply", et d'imaginaires setBody (), setFreeVariables().

Bonne journée!
Elegie
Le #23955111
On 11/11/2011 14:33, Elegie wrote :

Pour le formuler autrement, ajouter isNaN à tous les objets javascript -
par exemple en l'ajoutant sur le dernier objet de la chaîne des
prototypes, de façon à le rendre disponible pour tous les objets
javascript - est certainement possible, mais alourdirait d'autant les
fonctionnalités portées par cet objet (pollution de l'API).



Ou, pour illustrer:

---
function Cheval(name) {
this.name = name;
}

Cheval.prototype.galope = function() {
alert("Je galope");
}
---

Écrivons maintenant courageusement la documentation:

Cheval(name):
- Constructeur renvoyant un cheval. Le nom du cheval est passé en paramètre.

Cheval.galope():
- méthode permettant au cheval de galoper.

Cheval.isNaN():
- méthode qui permet de savoir si le cheval est égal à NaN. // <-- WTF?


Bien à vous,
Elegie.
SAM
Le #23955161
Le 11/11/11 15:47, Elegie a écrit :
On 11/11/2011 14:33, Elegie wrote :

Pour le formuler autrement, ajouter isNaN à tous les objets javascript -
par exemple en l'ajoutant sur le dernier objet de la chaîne des
prototypes, de façon à le rendre disponible pour tous les objets
javascript - est certainement possible, mais alourdirait d'autant les
fonctionnalités portées par cet objet (pollution de l'API).



Ou, pour illustrer:



J'a n'a rien compris !

surtout à : "WTF" ... Wagon de Transport Ferroviaire ?

« Cheval.galope() n'est pas une fonction ... »


---
function Cheval(name) {
this.name = name;
}

Cheval.prototype.galope = function() {
alert("Je galope");
}
---

Écrivons maintenant courageusement la documentation:

Cheval(name):
- Constructeur renvoyant un cheval. Le nom du cheval est passé en
paramètre.

Cheval.galope():
- méthode permettant au cheval de galoper.

Cheval.isNaN():
- méthode qui permet de savoir si le cheval est égal à NaN. // <-- WTF?



--
Stéphane Moriaux avec/with iMac-intel
Elegie
Le #23955251
On 11/11/2011 16:06, SAM wrote :

Salut,

J'a n'a rien compris !

surtout à : "WTF" ... Wagon de Transport Ferroviaire ?



Il s'agit d'un acronyme anglais interdit au moins de 18 ans, exprimant
vigoureusement un certain effet de surprise.

Dans "clean code", Robert Martin utilise l'image suivante dans son
introduction, image que j'avais en tête lorsque je rédigeai ma réponse
précédente:



« Cheval.galope() n'est pas une fonction ... »



Ce n'était qu'un raccourci de documentation. Dans les faits, il faudrait
engendrer un cheval (la méthode galope() est une méthode d'instance).

---
var Tonnerre = new Cheval("Tonnerre");
Tonnerre.galope();
---

Bye,
Elegie.
Une Bévue
Le #23957341
Le 11/11/2011 14:33, Elegie a écrit :

oui mais pourquoi est-ce une fonction (isNaN(an-expected-number)
plutôt qu'une mùéthode (an-expected-number.isNaN())



Dans la mesure où isNaN peut être appliqué à n'importe quel objet, il
est plus judicieux d'en encapsuler la fonctionnalité à part, i.e. d'en
faire une méthode statique (qui applique un algorithme indépendant à un
argument donné) plutôt qu'une méthode d'instance (qui requiert un
contexte particulier pour fonctionner, i.e. l'instance elle-même).



ah oui, suis-je bête, je n'avais pas vu cette bonne raison...
Olivier Miakinen
Le #23964001
Le 11/11/2011 14:33, Elegie répondait à Une Bévue :

oui mais pourquoi est-ce une fonction (isNaN(an-expected-number)
plutôt qu'une méthode (an-expected-number.isNaN())



Dans la mesure où isNaN peut être appliqué à n'importe quel objet, il
est plus judicieux d'en encapsuler la fonctionnalité à part, i.e. d'en
faire une méthode statique (qui applique un algorithme indépendant à un
argument donné) plutôt qu'une méthode d'instance (qui requiert un
contexte particulier pour fonctionner, i.e. l'instance elle-même).

Pour le formuler autrement, ajouter isNaN à tous les objets javascript -
par exemple en l'ajoutant sur le dernier objet de la chaîne des
prototypes, de façon à le rendre disponible pour tous les objets
javascript - est certainement possible, mais alourdirait d'autant les
fonctionnalités portées par cet objet (pollution de l'API).



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() !

Soit dit en passant, Une Bévue, c'est du même genre que la remarque que
je t'avais faite dans fr.comp.lang.php et que tu n'avais pas comprise,
quand tu essayais de faire FALSE->errorCode().

Cordialement,
--
Olivier Miakinen
Publicité
Poster une réponse
Anonyme