Quelle est la différence entre la valeur null et undefined en JavaScript?
Je veux savoir quelle est la différence entre null
et undefined
en JavaScript.
- double possible de Pourquoi est-il
null
valeur en JavaScript? - Surtout un double de JavaScript de vérification pour nulle et non définis et de la différence entre == et ===
- J'ai toujours pensé:
null
est vous le réglez à vide,undefined
il est vide, car il n'a pas été définie. Ounull
est vide sur la fin, alors que laundefined
est toujours vide. Fondamentalement, il indique l'intention. - Voir aussi Pourquoi est nul un objet et quelle est la différence entre la valeur null et undefined?
- NaN. Voir pour vous-même. console.journal(null-non défini). La différence entre la valeur null et undefined est NaN. (Notez que ceci est une tentative d'humour, avant de vous la flamme moi pour une mauvaise interprétation de la question.)
- Connaître indéfini et c'est la relation avec la portée codepen.io/grincheux/post/non défini-champ d'application-en-javascript
- Avec
null
vous utilisez, il est généralement pour effacer le contenu d'une variable, avecundefined
il est généralement livré avec l'entrée quand il n'y a pas été de définir une valeur encore.
Vous devez vous connecter pour publier un commentaire.
En JavaScript,
undefined
signifie une variable a été déclarée mais n'a pas encore attribué de valeur, tels que:null
est une affectation de la valeur. Il peut être assigné à une variable comme une représentation d'aucune valeur:À partir des exemples précédents, il est clair que
undefined
etnull
sont de deux types distincts:undefined
est un type lui-même (non défini), tandis quenull
est un objet.et
var a = {};
puisa.abc === undefined is true
..mais si vous nea.n=undefined;
maintenant est {un:undefined}... donc, peu importe si var a été déclarée ou non, il est pas défini !!!!node === undefined
toutnode
n'a pas été déclarée va jeter unReferenceError
parce quenode
est en effet (pun intended) undefined. Tu veux sans doute dire de vérifier sitypeof node === "undefined"
null
etundefined
. Avecfunction foo(bar = 'default') { return bar; }
, puisfoo(null) === null
maisfoo() === foo(undefined) === 'default'
. Réagir accessoires fonctionnent également de la même façon, il y a plus de raisons qu'avant, intentionnellement, passerundefined
plutôt quenull
.J'ai choisi ce à partir de ici
Lorsque vous déclarez une variable par le biais de la var et de ne pas lui donner une valeur, elle aura la valeur undefined. Par lui-même, si vous essayez de WScript.Echo() ou d'alerte() cette valeur, vous ne verrez rien. Toutefois, si vous ajoutez une chaîne vide de lui, puis tout à coup, il va apparaître:
Vous pouvez déclarer une variable, définie à null, et le comportement est identique sauf que vous allez voir "null" imprimée à l'extérieur ou de "undefined". C'est une petite différence en effet.
Vous pouvez même comparer une variable n'est pas définie à null, ou vice versa, et la condition sera vraie:
Cependant, ils sont considérés comme deux types différents. Alors que indéfini est un type tout à lui-même, la valeur null est considéré comme un objet de valeur. Vous pouvez voir cela en utilisant typeof() qui renvoie une chaîne représentant le type d'une variable:
Exécutant le script ci-dessus entraînera la sortie suivante:
Indépendamment de leur être de différents types, qu'ils seront toujours agir de la même si vous essayez d'accéder à un membre de l'un d'eux, par exemple, c'est-à-dire qu'ils vont lancer une exception. Avec WSH vous voir le redoutable "'varname' a la valeur null ou n'est pas un objet", et c'est si vous avez de la chance (mais c'est un sujet pour un autre article).
Vous pouvez explicitement définir une variable non définie, mais je conseille vivement contre elle. Je recommande que la définition de variables à null et un congé indéfini de la valeur pour les choses que vous avez oublié de mettre. En même temps, je vous encourage vraiment à toujours définir toutes les variables. JavaScript a un champ d'application de la chaîne différente de celle de C-style de langues, facilement déroutant, même vétéran de programmeurs, et la définition de variables à la valeur null est la meilleure façon de prévenir les bogues basée sur elle.
Un autre exemple où vous pourrez voir undefined pop up, c'est lors de l'utilisation de l'opérateur d'effacement. Ceux d'entre nous à partir d'un C-monde pourrait mal interpréter ce que la destruction d'un objet, mais il n'en est pas ainsi. Cette opération ne fait que supprimer un indice à partir d'un Tableau ou d'un membre d'un Objet. Pour les Tableaux, il n'a pas d'effet sur la longueur, mais plutôt que l'indice est maintenant considéré comme non défini.
Le résultat du script ci-dessus est:
Vous pourrez également obtenir de l'indéfini retourné lors de la lecture d'un indice ou d'un membre qui n'a jamais existé.
La différence entre la valeur null et undefined est: JavaScript ne seront jamais mettre quoi que ce soit à null, ce qui est généralement ce que nous faisons. Nous pouvons alors définir les variables à l'indéfini, nous préférons null, car il n'est pas quelque chose qui est déjà fait pour nous. Lorsque vous déboguez cela signifie que toute la valeur null est de votre fait et ne pas JavaScript. Au-delà, ces deux valeurs sont à peu près équivalent.
null est un mot-clé spécial qui indique une absence de valeur.
penser à cela comme une valeur, comme:
undefined propriété indique qu'une variable n'a pas été affecté une valeur null .
Comme
défini variable vide est
null
de type de donnéesundefined
Deux d'entre eux représentent un valeur d'une variable sans valeur
ET
null
ne représente pas un chaîne qui n'a pas de valeur - chaîne vide-Comme
Maintenant, si
MAIS
DONC chacun a sa propre façon d'utiliser
undefined l'utiliser pour comparer les variables de type de données
null l'utiliser pour la vidange d'une valeur d'une variable
null
Absolument EST un type de données: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs. 94).aspx . Le fait quetypeof null
retourneobject
est bien connu et documenté bug dans les premières versions de ECMAScript qui est resté pour la compatibilité ascendante. Le lien que vous en fait, posté dans votre commentaire dit à mi-chemin en bas de la page "typeof null // objet (bug dans ECMAScript, doit être null)" ! N'hésitez pas à vous montrer quelques efforts de recherche avant de commenter sur les votesnull: absence de valeur pour une variable, undefined: l'absence de la variable elle-même;
..où la variable est un nom symbolique associée à une valeur.
JS pourrait être assez aimable pour implicitement init nouvellement variables déclarées avec null, mais il ne le fait pas.
var a = {}; a.n = undefined;' then ..
un.hasOwnProperty('n') == true` ...donc, en disant: l'absence de la variable elle-même n'est pas correct plusVeuillez lire attentivement ce qui suit. Il doit enlever tous vos doutes concernant
la différence entre null et undefined en JavaScript. Vous pouvez également utiliser la fonction d'utilité étant donné ci-dessous pour déterminer exactement les types.
En JavaScript que l'on peut avoir à la suite des types de variables.
Suivante explique chacun de ces cas, un par un
Variables non déclarées: la Suite est vrai pour les variables non déclarées
Déclaré mais non attribués Variables
Les Variables assignées avec littérale undefined: Ces variables sont traitées de la même manière que le Déclaré Mais non attribués Variables.
Les Variables assignées avec littérale null
Les Variables assignées à autre chose qu'à undefined ou null
Suivant fournit l'algorithme pour corriger vérifier le type d'une variable:
Vous pouvez également utiliser la fonction d'utilité suivante pour déterminer les types. Actuellement, il prend en charge tous les ECMA 262 2017 types.
via JavaScript:The Definitive Guide
Je vais vous expliquer
undefined
,null
etUncaught ReferenceError
:1 -
Uncaught ReferenceError
: variable n'a pas été déclaré dans votre script, il n'y a aucune référence à ce fait2 -
undefined
: Variable déclarée, mais n'a pas été initialisée3 -
null
: Variable déclarée et est une valeur videIndéfini désigne une variable a été déclarée mais n'a pas de valeur:
Null est une affectation:
null et undefined distingue deux types d'objets qui ont en commun:
==
et!=
opérateurs.Les similitudes cependant fin ici. Pour une fois, il existe une différence fondamentale dans la manière dont les mots-clés null et undefined sont mis en œuvre. Ce n'est pas évident, mais prenons l'exemple suivant:
undefined, NaN et l'Infini sont juste des noms de preinitialized "superglobale" variables - ils sont initialisés au moment de l'exécution et peuvent être remplacées par des normales à l'échelle mondiale ou locale, variable avec le même nom.
Maintenant, laissez-vous tenter la même chose avec null:
Oups! null, vrai et faux sont des mots réservés - compilateur ne vous laisseront pas de les utiliser comme variable ou de la propriété des noms de
Une autre différence est que undefined est un type primitif, tandis que null est un type d'objet (indiquant l'absense d'un objet de référence). Considérez les points suivants:
Aussi, il y a une différence importante dans la manière null et undefined sont traités dans le contexte numérique:
null devient 0 lorsque utilisé dans des expressions arithmétiques ou numérique comparaisons - de la même manière à faux, il est fondamentalement juste un type spécial de "zéro". undefined, d'autre part, est un véritable "rien" et devient NaN ("pas un nombre") lorsque vous essayez de l'utiliser dans le contexte numérique.
Noter que null et undefined recevoir un traitement spécial de
==
et!=
opérateurs, mais vous pouvez tester véritable numérique de l'égalité de un et b avec l'expression(a >= b && a <= b)
.tl;dr
Utilisation
null
pour définir une variable, vous savez qu'elle est un Objet.Utilisation
undefined
pour définir une variable dont le type est mixte.C'est mon utilisation à la fois de 5 primitives et le type d'Objet, et qui expliquent la différence entre les « cas d'utilisation » de
undefined
ounull
.Chaîne
Si vous connaissez une variable est uniquement une chaîne pendant tout le cycle de vie, par convention, vous pouvez l'initialiser, à
""
:Nombre
Si vous connaissez une variable n'est qu'un nombre, alors que tous du cycle de vie, par convention, vous pouvez l'initialiser, à
0
(ouNaN
si0
est une valeur importante dans votre utilisation):ou
Boolean
Si vous connaissez une variable est seulement un booléen alors que tout le cycle de vie, par convention, vous pouvez l'initialiser, à
false
:Objet
Si vous connaissez une variable est plus seulement un Objet alors que tout le cycle de vie, par convention, vous pouvez l'initialiser, à
null
:Remarque: l'utilisation intelligente off null est à la falsy version d'un Objet parce qu'un Objet est toujours
true
, et parce quetypeof null
retourobject
. Cela signifie quetypeof myVarObject
retour cohérence de la valeur pour à la fois Objet et le type null.Tous
Si vous connaissez une variable a un type mixte (tout type alors que tout le cycle de vie), par convention, vous pouvez l'initialiser, à
undefined
.null
est une valeur particulière qui signifie "aucune valeur".null
est un objet spécial parce quetypeof null
retourne l '"objet".D'autre part,
undefined
signifie que la variable n'a pas été déclarées, ou n'a pas été donné une valeur.undefined
peut signifier qu'une variable n'a pas été déclaré, mais ne garantit pas que. Une variable peut être déclarée commevar thing;
et il sera égal àundefined
.Dans JavasSript il y a 5 types de données primitifs (String , Number , Boolean , null et undefined.
Je vais essayer d'expliquer avec quelques exemple simple
permet de dire que nous avons une fonction simple
également dans la fonction si(a == null) est la même que si(!a)
maintenant, quand nous appelons cette fonction sans passer le paramètre d'un
aussi
cela donnera undefined; nous avons déclaré une variable, mais nous n'avons pas asigned toute valeur à cette variable;
mais si nous écrire
null est un objet. en quelque sorte, nous avons attribué une valeur null à 'a'
La meilleure façon de comprendre la différence est d'abord de libérer votre esprit de tous les rouages de JavaScript et il suffit de comprendre les différences de sens entre:
Il y a une différence de sens entre ces trois cas, et JavaScript qui distingue les deux derniers cas avec deux valeurs différentes,
null
etundefined
. Vous êtes libre d'utiliser ces valeurs explicitement à transmettre ces significations.Donc, ce sont quelques-uns des JavaScript-les problèmes spécifiques qui se posent en raison de cette base philosophique?
Une variable déclarée sans un initialiseur obtient la valeur
undefined
parce que vous n'avez jamais rien dit à propos de la ce que la valeur de a été.Une propriété d'un objet qui n'a jamais été mis en évalue à
undefined
parce que personne n'a jamais dit quoi que ce soit sur la propriété.null
etundefined
sont "similaires" les uns aux autres parce que Brendan Eich a dit. Mais ils sont vraiment pas égaux les uns aux autres.null
etundefined
heureusement types différents.null
appartient au typeNull
etundefined
le typeUndefined
. C'est dans les specs, mais vous ne savez jamais ce à cause de latypeof
étrangeté qui je ne vais pas répéter ici.Une fonction d'atteindre la fin de son corps sans un retour explicite instruction retourne
undefined
puisque vous ne savez rien à propos de ce qu'il est retourné.Par ailleurs, il existe d'autres formes de "néant" en JavaScript (c'est bien d'avoir fait des études de Philosophie....)
NaN
ReferenceError
let
ouconst
défini variable locale dans son temporelle de la zone morte et la réception d'unReferenceError
Les cellules vides dans les matrices creuses. Oui ce ne sont pas de même
undefined
bien qu'ils comparent===
à undefined.null et undefined sont les deux sont utilisés pour représenter l'absence d'une certaine valeur.
a est initialisée et défini.
null est un objet en JavaScript
b n'est pas défini et initialisé
pas défini les propriétés de l'objet sont également indéfini. Par exemple, "x" n'est pas défini sur l'objet c et, si vous essayez d'accéder à c.x, il sera de retour indéfini.
Généralement nous affecter null à des variables non défini.
Object.prototype.toString.call(null); // "[object Null]"
Pour la
undefined
type, il en existe une et une seule valeur:undefined
.Pour la
null
type, il en existe une et une seule valeur:null
.Pour les deux d'entre eux, l'étiquette est à la fois son type et sa valeur.
La différence entre eux. Par exemple:
null
est une valeur videundefined
est une valeur manquanteOu:
undefined
n'a pas encore de valeurnull
avait une valeur et n'est pas plusEn fait,
null
est un mot-clé spécial, pas un identificateur, et donc vous ne pouvez pas le traiter comme une variable à affecter à.Cependant,
undefined
est un identificateur. Dans les deuxnon-strict
mode etstrict
mode, cependant, vous pouvez créer une variable locale du nom indéfini. Mais c'est une idée terrible!Référence: http://www.thesstech.com/javascript/null-and-undefined
Lorsque vous déclarez une variable en javascript, il est affecté à la valeur
undefined
. Cela signifie que la variable est intacte et peut être affecté à n'importe quelle valeur dans l'avenir. Il implique également que vous ne connaissez pas la valeur de cette variable va contenir au moment de la déclaration.Maintenant, vous pouvez affecter explicitement une variable
null
. Cela signifie que la variable n'a pas de valeur. Par exemple, Certaines personnes n'ont pas un deuxième nom. Donc, dans un tel cas de son mieux pour affecter la valeur null à la middlename variable d'une personne objet.Maintenant, supposons que quelqu'un accède à la middlename variable de votre personne, de l'objet et qu'il a la valeur
undefined
. Il ne sait pas si le développeur a oublié d'initialiser cette variable ou si il n'avait pas de valeur. Si elle a la valeurnull
, puis l'utilisateur peut facilement en déduire que middlename n'a aucune valeur et il n'est pas intacte variable.OK, on peut obtenir confus quand nous entendons parler de
null
etundefined
, mais commençons simple, ils sont tous les deux falsy et semblable à de nombreux égards, mais bizarre partie de JavaScript, font d'eux un couple de différences importantes, par exemple, typeofnull
est'object'
tout typeofundefined
est'undefined'
.Mais si vous vérifiez avec
==
comme ci-dessous, vous voyez, ils sont à la fois falsy:Vous pouvez également attribuer des
null
à une propriété d'un objet ou d'un primitif, tandis queundefined
peuvent tout simplement être atteints par l'attribue pas à quoi que ce soit.J'ai créer une image rapide de montrer les différences en un coup d'œil.
Que typeof renvoie undefined, undefined est un type où nulle est un initialiseur indique la variable pointe vers aucun objet(pratiquement tout le Javascript est un objet).
Par Ryan Morr approfondi d'article sur ce sujet...
"En règle générale, si vous devez attribuer une non-valeur d'une variable ou d'une propriété, le passer à une fonction, ou de retour à partir d'une fonction, la valeur null est presque toujours la meilleure option. Pour le dire simplement, JavaScript utilise pas défini et les programmeurs doivent utiliser la valeur null."
Voir Explorer l'Éternel Abîme de Null et Undefined
En javascript toutes les variables sont stockées comme des paires clé-valeur. Chaque variable est stockée en tant que nom_variable : variable_value/référence.
undefined signifie une variable a été donné une place dans la mémoire, mais aucune valeur n'est affectée. Comme une meilleure pratique, vous ne devriez pas utiliser ce type comme une cession.
Dans ce cas, comment désigner quand vous voulez une variable sans valeur à un moment plus tard dans le code? Vous pouvez utiliser le type
null ,qui est aussi un type qui est utilisé pour définir la même chose, l'absence de valeur, mais il n'est pas le même que indéfini, comme dans ce cas, vous avez réellement la valeur dans la mémoire. Cette valeur est null
Les deux sont similaires, mais l'usage et le sens sont différents.
La différence entre
undefined
etnull
est minime, mais il y a une différence. Une variable dont la valeur estundefined
n'a jamais été initialisé. Une variable dont la valeur estnull
a été donné explicitement une valeur denull
, ce qui signifie que la variable a été définie explicitement n'avoir aucune valeur. Si vous comparezundefined
etnull
à l'aide de lanull==undefined
expression, ils seront égaux.null==undefined
esttrue
seulement en raison de la conversion implicite (ou le terme équivalent en JS). De toute évidence,null===undefined
estfalse
parce que l'utilisation lorsque vous utilisez===
il compare le type ainsi.Fondamentalement, Undefined est une variable globale que javascript créer au moment de l'exécution si la valeur null signifie qu'aucune valeur n'est affectée à la variable (en fait, la valeur null est lui-même un objet).
Prenons un exemple:
Undefined c'est ce que vous obtiendrez en sortie.
Maintenant,
et vous obtiendrez 5 en sortie. C'est la principale différence entre les Undefined et null
null - C'est une affectation de la valeur, qui est utilisé avec la variable à représenter aucune valeur (c'est un objet).
undefined - C'est une variable qui n'a pas de valeur, donc JavaScript attribuer un undefined pour elle (c'est un type de données).
non déclarées - Si une variable n'est pas créé, il est connu comme non déclaré.
Je veux ajouter une très subtile différence entre
null
etundefined
qui est bon à savoir lorsque vous essayez d'apprendre à la Vanille JavaScript(JS) de sol:null
est un mot clé réservé en JS alors queundefined
est une variablesur l'objet global de l'environnement d'exécution dans lequel vous êtes.
Lors de l'écriture de code, cette différence n'est pas identifiable à la fois comme
null
etundefined
sont toujours utilisés dans l'ERS de JavaScript déclaration. Mais lorsque vous les utilisez dans LHS d'une expression, alors vous pouvez observer cette différence facilement. Donc, JS interprète interprète le code ci-dessous comme erreur:Il donne d'erreur ci-dessous:
Tout en dessous, le code s'exécute avec succès, bien que je ne vais pas recommander de le faire dans la vraie vie:
Cela fonctionne parce que
undefined
est une variable sur l'objet global (fenêtre de navigateur d'objet en cas de client-côté JS)Si une variable n'est pas initialisée, alors il n'est pas défini.
indéfini n'est pas un objet.
Exemple: var MyName;
console.log(typeof MyName);
Vérifier le journal de la console dans le développement de l'outil, il sera imprimé comme indéfini.
null est un objet.Si vous voulez de la variable à null la valeur null est utilisé.null variable existe mais la valeur n'est pas connue.Il doit être affectée à une variable pro grammaticalement. null n'est pas initialisée automatiquement.
Exemple : var MyName = null;
console.log(typeof MyName);
De vérifier la csole journal de en développement outil de, ce sera un objet.
Juste pour ajouter mon point de vue -
Une variable qui est déclarée seulement, et n'est jamais utilisé n'importe où, est enlevé par un compilateur d'optimisation dans le cas des langages compilés comme le C++[ou un avertissement est signalé dans l'IDE]. Au final, il signifie que la variable est inexistant car c'est la mémoire n'est jamais alloué.
Dans le cas de l'interpréteur javascript, [je pense] une variable est considérée comme n'existant qu'à partir du moment, où il est donné une valeur. Avant de ce point, il est de type "undefined", et pas de la mémoire est allouée pour elle. Et, donc, son type n'est pas défini.
Un nul en javascript est une valeur qui représente une adresse, mais que l'adresse des points pour rien encore[inexistant de référence]. Néanmoins, sa valeur.
undefined
) de la variable à partir d'un non-déclaré.undefined
est juste une valeur en tant que bien, et c'est la valeur par défaut pour les variables non initialisées.typeof
a la même sortie pour ces deux cas ne veut rien dire (même si elle peut se profiler à l'origine de la mise en œuvre de netscape). Certes, il est possible qu'un compilateur optimisant ne pas allouer les variables de pile jusqu'à ce qu'elles sont affectées, mais je ne pense pas que la non-optimisation de la les différentes implémentations (note: il n'y a pas un seul interprète de la langue) le faire - après tout, ES spec dit des environnements variables sont initialisées sur appel.Null est TOUJOURS un objet inconnu qui existe dans la mémoire, alors que undefined ne l'est pas.