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)

10 réponses

1 2
Avatar
Elegie
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!
Avatar
unbewusst.sein
Elegie wrote:

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)
Avatar
Dr J R Stockton
En fr.comp.lang.javascript message <1kafrad.1ewyn6rts1jliN%unbewusst.sei
, Mardi, 8 Nov 2011 22:50:12, Une Bévue
a ecrit:

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 <http://www.merlyn.demon.co.uk/> - w. FAQish topics, links, acronyms
PAS EXE etc. : <http://www.merlyn.demon.co.uk/programs/> - see in 00index.htm
Dates - miscdate.htm estrdate.htm js-dates.htm pas-time.htm critdate.htm etc.
Avatar
Une Bévue
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())

???
Avatar
Elegie
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!
Avatar
Elegie
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.
Avatar
SAM
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
Avatar
Elegie
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:

<URL:http://www.osnews.com/story/19266/WTFs_m>


« 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.
Avatar
Une Bévue
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...
Avatar
Olivier Miakinen
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
1 2