En JavaScript, nous avons quelque chose appelé non défini . J'ai dit quelque chose, parce que je ne sais vraiment pas si c'est une classe de base, ou une variable intégrée, ou un mot-clé, ou autre chose. Je sais juste que c'est là.
Pour le voir en action, vous pouvez simplement écrire:
undefined;
typeof undefined;
Quelqu'un peut-il m'expliquer pourquoi cette chose a été insérée dans JavaScript? Nous avons de la null
valeur dans ce langage, donc cela ne devrait pas ressembler à quelque chose null
. Dans d'autres langages, lorsque nous ne connaissons pas la valeur d'une propriété ou d'une variable, nous la mettons simplement à null. Ici, nous pouvons faire la même chose.
Comment pouvons-nous utiliser cette chose en JavaScript?
javascript
language-design
Saeed Neamati
la source
la source
undefined
et quand utilisernull
Réponses:
Il y a DEUX choses que vous devez comprendre sur undefined ...
undefined
qui ne peut avoir qu'une seule valeur .undefined
Lisez maintenant attentivement ce qui suit ...
Il y a tellement de valeurs de type
number
(10, 10.01, 1e1). Mais il ne peut y avoir qu'une seule valeur de typeundefined
, et cette valeur est stockée dans la variableundefined
. Cette valeur a une représentation littérale NO - par exemple, des valeurs numériques1
,100
,1e-1
sont tous littéraux du numéro de type, mais la valeur stockée dans la variableundefined
n'a pas de forme littérale.undefined
est une variable, juste une variable normale, que JavaScript déclare et lui attribue la valeur de typeundefined
dans la portée globale. Vous pouvez donc faire tout ce qui suit ...undefined
, vous pouvez générer la valeur de typeundefined
par l'expressionvoid 0
- dont le seul but est de renvoyer une valeur de typeundefined
.NON. Tout comme personne ne peut expliquer pourquoi les variables non déclarées vont à la portée globale au lieu de locales. Il vous suffit de vous entraîner à l' utiliser intelligemment au lieu d'essayer de trouver des justifications à son existence.
Bien que cela
null
puisse faire des chosesundefined
, il est plus ou moins lié auxobjects
scalaires plutôt qu'aux scalaires. En effet, JavaScript se considèrenull
comme un objet -typeof null
renvoie "objet".À mon avis, l'essentiel est de NE PAS essayer de raisonner les buts absolus de
undefined
etnull
- et de les utiliser dans votre code de manière intelligible, afin que votre code soit lisible, maintenable et réutilisable.la source
the bottom line is to NOT try to reason the absolute purposes of undefined and null
, semble que JavaScript soit un peu plus loin d'être un langage logique et nous devons simplement nous y habituer, comme expérimenter un nouveau monde.undefined
". Évalue réellementvoid
une expression, ignore la valeur de retour et renvoie laundefined
valeur. Quant aux différences.undefined
est utilisé par le moteur JS pour dire que cette chose n'a aucune valeur.null
est utilisé par VOUS pour dire que cette chose n'a aucune valeur. Il y a une distinction claire .undefined = 100; typeof undefined;
renvoie "indéfini" pour moi, si vous essayez d'affecter à null, vous obtenez une erreur. Je voulais juste clarifier cela pour les futurs lecteurs.Désolé d'avoir répondu à une question plus ancienne, mais la raison pour laquelle vous avez besoin à la fois de non défini et de null est simple: dans un langage de typage de canard basé sur un prototype, vous devez absolument faire la différence entre "cet objet ne définit pas de valeur pour X" et "cet objet indique que X est rien / null / vide ".
Sans cette capacité, il n'y a aucun moyen de parcourir la chaîne du prototype et l'héritage ne peut donc pas fonctionner; vous devez être en mesure de déterminer que obj.someProp n'est pas défini afin que vous puissiez consulter obj.prototype.someProp et continuer la chaîne jusqu'à ce que vous trouviez une valeur. Si obj.someProp retournait null, il n'y aurait aucun moyen de savoir s'il était vraiment nul ou signifiait simplement "regardez mon prototype". La seule autre façon de contourner ce problème est d'injecter de la magie délirante dans les coulisses, ce qui brise votre capacité à jouer avec les chaînes de prototypes et à faire divers autres morceaux de magie noire JS.
Comme beaucoup de Javascript, l'idée d'undefined et de null semble au début ridicule et stupide, puis absolument brillante plus tard (puis à nouveau à wonky et stupide mais avec une explication raisonnable).
Un langage comme C # ne se compilera pas si vous accédez à une propriété qui n'existe pas et d'autres langages dynamiques lèvent souvent des exceptions lors de l'exécution lorsque vous touchez une propriété qui n'existe pas, ce qui signifie que vous devez utiliser des constructions spéciales pour les tester. Plus les classes signifient que lorsqu'un objet est instancié, vous connaissez déjà sa chaîne d'héritage et toutes ses propriétés - dans JS, je peux modifier un prototype 15 étapes plus haut dans la chaîne et ces changements apparaîtront sur les objets existants.
la source
Il existe une variable globale
undefined
, qui est définie sur la valeur non définie. Les méchants peuvent le régler sur autre chose, il est donc préférable de ne pas lui faire confiance.typeof undeclaredVariable == 'undefined'
. essayer de lire la valeur d'une variable sous-définie vous obtiendra un jetReferenceError
.)null
est subtilement cassé, cartypeof null == 'object'
. Je ne sais pas pourquoi nous avonsundefined
etnull
, probablement un accident historique.la source
Eh bien,
undefined
une valeur sentinelle est obtenue en évaluant quelque chose qui n'est pas défini par opposition ànull
, qui est la valeur exactement définie pour ne rien représenter .Ainsi, par exemple, la valeur de retour d'une fonction, qui ne définit pas de valeur de retour, n'est pas définie. La valeur d'une propriété non définie sur un objet n'est pas définie. La valeur de retour d'une instruction, qui n'est pas une expression, n'est pas définie (même si vous ne verrez pas cela se produire autrement que dans la console).
Veuillez noter que vous pouvez créer une fonction qui renvoie explicitement
undefined
et vous pouvez définir explicitement une propriété avec la valeur deundefined
sur un objet, car au final c'est une valeur valide. Vous le feriez afin de communiquer explicitement, que quelque chose n'est pas défini .Vous pourriez penser à la relation de
undefined
etnull
comme cela entreNaN
et0
.la source
undefined
c'estvoid
?void
en JavaScript est un opérateur unaire , qui prend n'importe quel argument et renvoie la valeurundefined
.