J'ai toujours pensé: nullest-ce que vous le mettez à vide, undefinedil est vide parce qu'il n'a pas été défini. Ou nullest vide exprès, alors qu'il undefinedest encore vide. Fondamentalement, cela montre l'intention.
NaN. Voir par vous-même. console.log (null-undefined). La différence entre null et undefined est NaN. (Notez que ceci est une tentative d'humour, avant que vous ne me flambiez pour avoir mal compris la question.)
Ivan
Réponses:
1042
En JavaScript, undefinedsignifie qu'une variable a été déclarée mais n'a pas encore reçu de valeur, telle que:
D'après les exemples précédents, il est clair que undefinedet nullsont deux types distincts: undefinedest un type lui-même (non défini) tandis que nullest un objet.
Citation du livre Professional JS For Web Developers (Wrox): "Vous vous demandez peut-être pourquoi l'opérateur typeof renvoie 'object' pour une valeur nulle. Il s'agissait en fait d'une erreur dans l'implémentation JavaScript d'origine qui a ensuite été copiée dans ECMAScript. Aujourd'hui , il est rationalisé que null est considéré comme un espace réservé pour un objet, même si, techniquement, c'est une valeur primitive. "
Captain Sensible
34
la variable pourrait tout aussi bien ne pas être définie du tout. par exemple: console.log (typeof (abc)); undefined
Nir O.
19
Le commentaire de Nir O. est très important. Si je veux avoir une variable qui n'a pas de valeur au début, j'écris "... = null", par exemple "myvar = null". De cette façon - lorsque je saisis "if (myxar == null) {...}" - le bloc if n'est pas exécuté. Je n'ai pas cet avantage avec undefined: myvar = undefined; myvar = 4; if (typeof myxar == "undefined") {...}
Wolfgang Adamec
11
@Wolfgang Adamec, la programmation sans erreur ne concerne pas les erreurs de frappe.
Jorge Fuentes González
12
Donc, fondamentalement, une valeur nulle signifie qu'une variable a été explicitement définie comme (pas de valeur = null) ou a été initialisée et définie comme étant rien. Bien indéfini signifie. il n'a probablement jamais été initialisé ou s'il l'a été, il n'a jamais été défini.
La valeur non définie est une valeur primitive utilisée lorsqu'aucune valeur n'a été affectée à une variable.
La valeur nulle est une valeur primitive qui représente la référence nulle, vide ou inexistante.
Lorsque vous déclarez une variable via var et ne lui donnez pas de valeur, elle aura la valeur indéfinie. En soi, si vous essayez d'utiliser WScript.Echo () ou alert () cette valeur, vous ne verrez rien. Cependant, si vous y ajoutez une chaîne vide, elle apparaîtra soudainement:
var s;WScript.Echo(s);WScript.Echo(""+ s);
Vous pouvez déclarer une variable, la définir sur null et le comportement est identique sauf que vous verrez "null" imprimé contre "undefined". C'est vraiment une petite différence.
Vous pouvez même comparer une variable non définie à null ou vice versa, et la condition sera vraie:
undefined==nullnull==undefined
Ils sont cependant considérés comme deux types différents. Bien qu'undefined soit un type à lui tout seul, null est considéré comme une valeur d'objet spécial. Vous pouvez le voir en utilisant typeof () qui retourne une chaîne représentant le type général d'une variable:
var a;WScript.Echo(typeof(a));var b =null;WScript.Echo(typeof(b));
L'exécution du script ci-dessus entraînera la sortie suivante:
undefined
object
Indépendamment du fait qu'ils soient de types différents, ils agiront toujours de la même manière si vous essayez d'accéder à un membre de l'un ou l'autre, c'est-à-dire qu'ils lèveront une exception. Avec WSH, vous verrez le redouté "'varname' est nul ou pas un objet" et c'est si vous êtes chanceux (mais c'est un sujet pour un autre article).
Vous pouvez explicitement définir une variable pour qu'elle ne soit pas définie, mais je la déconseille fortement. Je recommande de définir uniquement les variables sur null et de laisser indéfinie la valeur des éléments que vous avez oublié de définir. En même temps, je vous encourage vraiment à toujours définir chaque variable. JavaScript a une chaîne de portée différente de celle des langages de style C, confondant facilement même les programmeurs chevronnés, et définir des variables sur null est le meilleur moyen d'éviter les bogues basés sur elle.
Une autre instance où vous verrez une fenêtre contextuelle non définie est lors de l'utilisation de l'opérateur de suppression. Ceux d'entre nous d'un monde C pourraient à tort interpréter cela comme détruisant un objet, mais ce n'est pas le cas. Cette opération consiste à supprimer un indice d'un tableau ou un membre d'un objet. Pour les tableaux, cela n'affecte pas la longueur, mais plutôt que l'indice est désormais considéré comme non défini.
var a =['a','b','c'];delete a[1];for(var i =0; i < a.length; i++)WScript.Echo((i+".) "+a[i]);
Le résultat du script ci-dessus est:
0.) a
1.)undefined2.) c
Vous obtiendrez également un retour non défini lors de la lecture d'un indice ou d'un membre qui n'a jamais existé.
La différence entre null et undefined est: JavaScript ne définira jamais rien sur null, c'est généralement ce que nous faisons. Bien que nous puissions définir des variables sur undefined, nous préférons null car ce n'est jamais quelque chose qui est fait pour nous. Lorsque vous déboguez, cela signifie que tout ce qui est défini sur null vous appartient et non JavaScript. Au-delà, ces deux valeurs spéciales sont presque équivalentes.
Vraiment une bonne réponse. Mais juste pour souligner, quand u a coché "undefined == null" la vérification du type n'était pas stricte. Par conséquent, il est revenu "vrai". Si vous cochez "undefined === null", cela retournerait false.
wOlVeRiNe
3
Il convient de noter que si ce commentaire était vrai en 2011, avec l'avènement des paramètres de fonction facultatifs, l'émergence de systèmes de vérification de type comme Flow et l'omniprésence de React (qui traitent tous indéfiniment et nullement très différemment), l'ancienne sagesse de en général, l'utilisation de null plutôt que d'undefined n'est plus aussi stricte. undefined est en fait préférable à null dans de nombreux cas où vous souhaitez utiliser explicitement la valeur par défaut (par exemple pour un paramètre facultatif ou un accessoire React facultatif).
0x24a537r9
66
(l'ajout de caractères en raison du manque de caractères, donc je suis autorisé à poster ceci.)
Pourriez-vous inclure l'attribution de la source de l'image, s'il vous plaît?
Vega
1
@Vega Malheureusement non, je ne me souviens pas d'où je l'ai obtenu ailleurs que sur imgur.com et c'est probablement à partir d'un republication, pas de la source ORIGINALE. Même le lien intégré ici ne donne aucune idée de qui a posté cette version, donc je ne peux pas vraiment la rechercher non plus.
Sebastian Norr
1
ha ha ha ... c'est la meilleure explication que j'aie jamais vue! cool!
Akbar Mirsiddikov
36
null est un mot-clé spécial qui indique une absence de valeur.
pensez-y comme une valeur, comme:
"foo" est une chaîne,
vrai est booléen,
1234 est nombre,
null n'est pas défini.
indéfini propriété indique qu'une variable n'a pas reçu de valeur incluant null aussi. Comme
var foo;
la variable vide définie est nullde type de donnéesundefined
Les deux représentent une valeur d'une variable sans valeur
ETnull ne représente pas une chaîne sans valeur - chaîne vide -
Comme
var a ='';
console.log(typeof a);// string
console.log(a ==null);//false
console.log(a ==undefined);// false
Maintenant si
var a;
console.log(a ==null);//true
console.log(a ==undefined);//true
MAIS
var a;
console.log(a ===null);//false
console.log(a ===undefined);// true
DONC chacun a sa propre façon d'utiliser
indéfini utiliser pour comparer le type de données variable
null l' utiliser pour vider une valeur d'une variable
var a ='javascript';
a =null;// will change the type of variable "a" from string to object
null est également un type de données. Undefined et null sont des types de données et des valeurs
danwellman
9
nullEST absolument un type de données: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx. Le fait que les typeof nullretours objectsoient un bogue bien connu et documenté dans les premières versions d'ECMAScript est resté pour la compatibilité descendante. Le lien que vous avez réellement publié dans votre commentaire indique à mi-chemin de la page "typeof null // objet (bogue dans ECMAScript, devrait être nul)"! Alors s'il vous plaît, montrez un peu d'effort de recherche avant de commenter les votes
négatifs
1
Les définitions sont contradictoires: "absence de valeur" vs "n'a pas reçu de valeur". N'est-ce pas pareil?
Zon
3
Je ne suis pas d'accord avec cette réponse. Null et undefined sont tous deux des types de données distincts. null est de type null et undefined est de type undefined. Ce n'est qu'en utilisant un opérateur véridique (==) que nous pouvons voir que javascript dit son vrai mais qu'une comparaison stricte (===) produit un faux.
alaboudi
19
null : absence de valeur pour une variable; indéfini : absence de variable elle-même;
La variable ..where est un nom symbolique associé à une valeur.
JS pourrait être assez aimable pour initier implicitement les nouvelles variables déclarées avec null , mais ce n'est pas le cas.
var a = {}; a.n = undefined;' then ..a.hasOwnProperty ('n') == true` ... donc dire que l' absence de variable elle - même n'est plus correct
Muhammad Umer
17
S'il vous plaît lisez avec attention. Cela supprimera tous vos doutes concernant la différence entre null et indéfini en JavaScript. Vous pouvez également utiliser la fonction utilitaire indiquée ci-dessous pour déterminer exactement les types.
En JavaScript, nous pouvons avoir les types de variables suivants.
Variables non déclarées
Variables déclarées mais non attribuées
Variables affectées avec un littéral non défini
Variables affectées d'un littéral nul
Variables affectées avec autre chose qu'indéfini ou nul
Ce qui suit explique chacun de ces cas un par un
Variables non déclarées : ce qui suit est vrai pour les variables non déclarées
Ne peut être vérifié que par typeof () qui retourne une chaîne 'undefined'
Ne peut pas être vérifié avec == ou === ou par un opérateur if ou conditionnel ? (lance une erreur de référence)
Variables déclarées mais non attribuées
typeof renvoie une chaîne «non définie»
== vérifier avec null renvoie vrai
== vérifier avec des retours indéfinis true
=== vérifier avec null renvoie false
=== vérifier avec des retours indéfinis true
si ou opérateur conditionnel ? renvoie faux
Variables affectées avec un littéral non défini : ces variables sont traitées de la même manière que les variables déclarées mais non attribuées .
Variables affectées d'un littéral nul
typeof renvoie la chaîne 'object'
== vérifier avec null renvoie vrai
== vérifier avec des retours indéfinis true
=== vérifier avec null renvoie vrai
=== vérifier avec des retours non définis false
si ou opérateur conditionnel ? renvoie faux
Variables affectées avec autre chose qu'indéfini ou nul
Ce qui suit fournit l'algorithme pour la vérification de type correcte d'une variable:
Vérifiez non déclaré / non affecté / attribué avec non défini à l' aide de typeof . retourne si la chaîne 'non définie' est retournée.
Vérifiez null en utilisant === . retourne 'null' si vrai .
Vérifiez le type réel à l'aide de typeof . retourne le type s'il n'est pas égal à «objet»
Appelez Object.prototype.toString.call (o) pour déterminer le type d'objet réel. Il doit retourner une chaîne de type «[object ObjectType]» pour tous les objets définis en Javascript ou DOM . Pour les objets définis par l'utilisateur, il renvoie '[objet objet]'
Vous pouvez également utiliser la fonction utilitaire suivante pour déterminer les types. Il prend actuellement en charge tous les types ECMA 262 2017.
Vous pouvez considérer undefined pour représenter une absence de valeur au niveau du système, inattendue ou semblable à une erreur et null pour représenter une absence de valeur au niveau du programme, normale ou attendue.
Je vais vous expliquer undefined, nulletUncaught ReferenceError :
1 - Uncaught ReferenceError: la variable n'a pas été déclarée dans votre script, il n'y a aucune référence à cette variable
2 - undefined: Variable déclarée mais non initialisée
3 - null: Variable déclarée et est une valeur vide
null et undefined sont deux types d'objets distincts qui ont en commun les éléments suivants:
les deux ne peuvent contenir qu'une seule valeur, nulle et non définie respectivement;
les deux n'ont pas de propriétés ou de méthodes et une tentative de lecture des propriétés de l'une ou l'autre entraînera une erreur d'exécution (pour tous les autres objets, vous obtenez une valeur non définie si vous essayez de lire une propriété inexistante);
les valeurs nulles et non définies sont considérées comme égales entre elles et à rien d'autre par les opérateurs ==et !=.
Les similitudes s'arrêtent cependant ici. Pour une fois, il existe une différence fondamentale dans la façon dont les mots-clés null et undefined sont implémentés. Ce n'est pas évident, mais considérons l'exemple suivant:
varundefined="foo";WScript.Echo(undefined);// This will print: foo
indéfini , NaN et Infinity sont que des noms de variables "superglobales" préinitialisées - elles sont initialisées au moment de l'exécution et peuvent être remplacées par une variable globale ou locale normale portant les mêmes noms.
Maintenant, essayons la même chose avec null :
varnull="foo";// This will cause a compile-time errorWScript.Echo(null);
Oops! null , true et false sont des mots clés réservés - le compilateur ne vous permet pas de les utiliser comme noms de variable ou de propriété
Une autre différence est que undefined est un type primitif, alors que null est un type d'objet (indiquant l'absence d'une référence d'objet). Considérer ce qui suit:
WScript.Echo(typeoffalse);// Will print: booleanWScript.Echo(typeof0);// Will print: numberWScript.Echo(typeof"");// Will print: stringWScript.Echo(typeof{});// Will print: objectWScript.Echo(typeofundefined);// Will print: undefinedWScript.Echo(typeofnull);// (!!!) Will print: object
En outre, il existe une différence importante dans la façon dont null et undefined sont traités dans un contexte numérique:
var a;// declared but uninitialized variables hold the value undefinedWScript.Echo(a ===undefined);// Prints: -1var b =null;// the value null must be explicitly assigned WScript.Echo(b ===null);// Prints: -1WScript.Echo(a == b);// Prints: -1 (as expected)WScript.Echo(a >= b);// Prints: 0 (WTF!?)WScript.Echo(a >= a);// Prints: 0 (!!!???)WScript.Echo(isNaN(a));// Prints: -1 (a evaluates to NaN!)WScript.Echo(1*a);// Prints: -1.#IND (in Echo output this means NaN)WScript.Echo(b >= b);// Prints: -1 (as expected)WScript.Echo(isNaN(b));// Prints: 0 (b evaluates to a valid number)WScript.Echo(1*b);// Prints: 0 (b evaluates to 0)WScript.Echo(a >=0&& a <=0);// Prints: 0 (as expected)WScript.Echo(a ==0);// Prints: 0 (as expected)WScript.Echo(b >=0&& b <=0);// Prints: -1 (as expected)WScript.Echo(b ==0);// Prints: 0 (!!!)
null devient 0 lorsqu'il est utilisé dans des expressions arithmétiques ou des comparaisons numériques - de manière similaire à false , il s'agit essentiellement d'un type spécial de "zéro". undefined , d'autre part, est un vrai "rien" et devient NaN ("pas un nombre") lorsque vous essayez de l'utiliser dans un contexte numérique.
Notez que null et undefined reçoivent un traitement spécial de la part des opérateurs ==et !=, mais vous pouvez tester la véritable égalité numérique de a et b avec l'expression (a >= b && a <= b).
Si vous savez qu'une variable n'est qu'un nombre alors que tout le cycle de vie, par convention, vous pouvez l'initialiser 0(ou NaNs'il 0s'agit d'une valeur importante dans votre utilisation):
Remarque: l'utilisation intelligente hors null doit être la version falsifiée d'un objet car un objet l'est toujours trueet parce que typeof nullreturn object. Cela signifie typeof myVarObjectrenvoyer une valeur cohérente pour le type Object et null.
Tout
Si vous savez qu'une variable a un type mixte (n'importe quel type pendant tout le cycle de vie), par convention, vous pouvez l'initialiser à undefined.
Il est important de noter que tandis que undefinedpeut signifier qu'une variable n'a pas été déclarée, mais ne garantit pas cela. Une variable peut être déclarée comme var thing;et elle sera égale à undefined.
Yura
6
La meilleure façon de comprendre la différence est de d'abord vider votre esprit du fonctionnement interne de JavaScript et de simplement comprendre les différences de sens entre:
let supervisor ="None"// I have a supervisor named "None"let supervisor =null// I do NOT have a supervisor. It is a FACT that I do not.let supervisor =undefined// I may or may not have a supervisor. I either don't know// if I do or not, or I am choosing not to tell you. It is// irrelevant or none of your business.
Il y a une différence de sens entre ces trois cas, et JavaScript distingue les deux derniers cas avec deux valeurs différentes, nulletundefined . Vous êtes libre d'utiliser ces valeurs explicitement pour transmettre ces significations.
Alors, quels sont les problèmes spécifiques à JavaScript qui se posent en raison de cette base philosophique?
Une variable déclarée sans initialiseur obtient la valeur undefinedcar vous n'avez jamais rien dit sur la valeur prévue.
let supervisor;
assert(supervisor ===undefined);
Une propriété d'un objet qui n'a jamais été définie est évaluée undefinedcar personne n'a jamais rien dit sur cette propriété.
const dog ={ name:'Sparky', age:2};
assert(dog.breed ===undefined);
nullet undefinedsont "similaires" les uns aux autres parce que Brendan Eich l'a dit. Mais ils ne sont absolument pas égaux entre eux.
nullet undefinedheureusement avoir différents types. nullappartient au type Nullet undefinedau type Undefined. C'est dans la spécification, mais vous ne le sauriez jamais à cause de l' typeofétrangeté que je ne répéterai pas ici.
Une fonction atteignant la fin de son corps sans une déclaration de retour explicite renvoie undefinedpuisque vous ne savez rien de ce qu'elle a renvoyé.
Soit dit en passant, il existe d'autres formes de "néant" en JavaScript (c'est bien d'avoir étudié la philosophie ...)
NaN
Utiliser une variable qui n'a jamais été déclarée et recevoir un ReferenceError
Utiliser une variable locale letou constdéfinie dans sa zone morte temporelle et recevoir unReferenceError
Cellules vides dans des tableaux clairsemés. Oui, ce ne sont même pas undefinedbien qu'ils se comparent ===à indéfinis.
$ node
>const a =[1,undefined,2]>const b =[1,,2]> a
[1,undefined,2]> b
[1,<1 empty item>,2]
Meilleure réponse! La plupart des réponses ignorent le fait que vous pouvez définir la valeur d'une variable commeundefined , comme dans le let supervisor = undefinedcas.
J. Bruni
Merci, et oui, cette idée fausse que quelque chose n'est undefinedque si elle n'a pas été déclarée ou n'a pas encore reçu de valeur est si répandue et il est vraiment difficile de communiquer avec les gens (bien que je continue d'essayer). Tant de gens JavaScript pour avoir la poubelle à la fois nullet , undefinedmais ces valeurs n'ont des significations complètement distinctes et pour la plupart ils travaillent bien avec leurs significations prévues (IMHO bien sûr).
Ray Toal
5
Dans JavasSript, il existe 5 types de données primitifs String, Number, Boolean, null et undefined. Je vais essayer d'expliquer avec un exemple simple
disons que nous avons une fonction simple
function test(a){if(a ==null){
alert("a is null");}else{
alert("The value of a is "+ a);}}
également dans la fonction ci-dessus si (a == null) est le même que si (! a)
maintenant, quand nous appelons cette fonction sans passer le paramètre a
test(); it will alert "a is null";
test(4); it will alert "The value of a is "+4;
aussi
var a;
alert(typeof a);
cela donnera indéfini; nous avons déclaré une variable mais nous n'avons attribué aucune valeur à cette variable; mais si on écrit
var a =null;
alert(typeof a); will give alert as object
donc null est un objet. d'une certaine manière, nous avons attribué une valeur nulle à «a»
Pour le undefinedtype, il existe une et une seule valeur:undefined .
Pour le nulltype, il existe une et une seule valeur:null .
Donc pour les deux, le label est à la fois son type et sa valeur.
La différence entre eux. Par exemple:
null est une valeur vide
undefined est une valeur manquante
Ou:
undefined n'a pas encore de valeur
null avait une valeur et n'a plus
En fait, nullest un mot-clé spécial - , pas un identifiant, et donc vous ne pouvez pas le traiter comme une variable à affecter.
Cependant, undefinedc'est un identifiant . En non-strictmode et en strictmode, cependant, vous pouvez créer une variable locale du nom non défini. Mais c'est une terrible idée!
function foo(){undefined=2;// bad idea!}
foo();function foo(){"use strict";undefined=2;// TypeError!}
foo();
Lorsque vous déclarez une variable en javascript, la valeur lui est affectée undefined. Cela signifie que la variable est intacte et peut être affectée à n'importe quelle valeur à l'avenir. Cela implique également que vous ne connaissez pas la valeur que cette variable va contenir au moment de la déclaration.
Vous pouvez maintenant attribuer explicitement une variable null . Cela signifie que la variable n'a aucune valeur. Par exemple - Certaines personnes n'ont pas de deuxième prénom. Dans un tel cas, il est donc préférable d'affecter la valeur null à la variable de nom intermédiaire d'un objet personne.
Supposons maintenant que quelqu'un accède à la variable middlename de votre objet person et qu'elle ait la valeur undefined. Il ne saurait pas si le développeur a oublié d'initialiser cette variable ou si elle n'a aucune valeur. S'il a la valeur null, alors l'utilisateur peut facilement déduire que le nom intermédiaire n'a aucune valeur et qu'il ne s'agit pas d'une variable intacte.
les propriétés d'objet non définies ne sont pas non plus définies. Par exemple, "x" n'est pas défini sur l'objet c et si vous essayez d'accéder à cx, il retournera non défini.
Généralement, nous attribuons null à des variables non indéfinies.
Par l'article complet de Ryan Morr sur ce sujet ...
"En général, si vous devez attribuer une non-valeur à une variable ou à une propriété, la transmettre à une fonction ou la renvoyer à partir d'une fonction, null est presque toujours la meilleure option. Pour le dire simplement, JavaScript utilise undefined et les programmeurs doivent utilisez null. "
Null et non défini en JavaScript indiquent l'absence de valeur.
var a =null;//variable assigned null valuevar b;// undefined
Malgré le fait que les deux existent pour l'absence de valeur, mais: Undefined signifie en fait que la variable n'est pas initialisée. Fonctions qui ne renvoient rien et paramètres de fonction pour lesquels aucune valeur n'est fournie, une valeur non définie est renvoyée. Utilisez l'opérateur d'égalité stricte === pour faire la distinction entre null et indéfini.
OK, nous pouvons être confus lorsque nous en entendons parler nullet undefined, mais commençons simplement, ils sont tous deux faux et similaires à bien des égards, mais une partie étrange de JavaScript, en fait quelques différences importantes, par exemple, typeofnull est 'object'tandis que typeofundefined est 'undefined'.
Comme typeof renvoie undefined, undefined est un type où comme null est un initialiseur indique que la variable ne pointe vers aucun objet (pratiquement tout en Javascript est un objet).
En javascript, toutes les variables sont stockées sous forme de paires de valeurs clés. Chaque variable est stockée sous nom_variable: valeur_variable / référence .
undefined signifie qu'une variable a reçu un espace en mémoire, mais aucune valeur ne lui est affectée. En tant que meilleure pratique, vous ne devez pas utiliser ce type comme affectation.
Dans ce cas, comment indiquer quand vous souhaitez qu'une variable soit sans valeur à un stade ultérieur du code? Vous pouvez utiliser le type
null , qui est également un type utilisé pour définir la même chose, l'absence de valeur, mais ce n'est pas la même chose que non défini, car dans ce cas, vous avez réellement la valeur en mémoire. Cette valeur est nulle
Les deux sont similaires mais l'usage et le sens sont différents.
Je veux ajouter une différence très subtile entre nullet undefinedce qui est bon à savoir lorsque vous essayez d'apprendre de Vanilla JavaScript (JS) de fond en comble:
nullest un mot clé réservé dans JS while undefinedest une variable sur l'objet global de l'environnement d'exécution dans lequel vous vous trouvez.
Lors de l'écriture de code, cette différence n'est pas identifiable comme les deux nullet undefinedest toujours utilisée dans RHS d'une instruction JavaScript. Mais lorsque vous les utilisez dans LHS d'une expression, vous pouvez facilement observer cette différence. L'interpréteur JS interprète donc le code ci-dessous comme une erreur:
varnull='foo'
Il donne l'erreur ci-dessous:
SyntaxError non capturée: null de jeton inattendu
Bien que le code ci-dessous fonctionne correctement, je ne le recommanderai pas dans la vraie vie:
varundefined='bar'
Cela fonctionne car il undefineds'agit d'une variable sur l'objet global (objet de fenêtre de navigateur en cas de JS côté client)
undefined='bar'n'attribue pas vraiment de valeur à undefined(qui est immuable), il ne lance simplement pas d'erreur de manière confuse.
Dmitri Zaitsev
1
La différence entre undefinedet nullest minime, mais il y a une différence. Une variable dont la valeur est undefinedn'a jamais été initialisée. Une variable dont la valeur est nulla reçu explicitement une valeur de null, ce qui signifie que la variable a été explicitement définie pour n'avoir aucune valeur. Si vous comparez undefinedet nullen utilisant l' null==undefinedexpression, ils seront égaux.
Cette réponse est trompeuse ... voir la discussion dans la réponse acceptée. En bout de ligne - null==undefinedc'est trueuniquement en raison de la fonte implicite (ou du terme équivalent dans JS). Évidemment, null===undefinedc'est falseparce que l'utilisation lorsque vous l'utilisez ===compare également le type .
guyarad
1
Fondamentalement, Undefined est une variable globale que javascript crée au moment de l'exécution, que null signifie qu'aucune valeur n'a été attribuée à la variable (en fait, null est lui-même un objet).
Prenons un exemple:
var x;//we declared a variable x, but no value has been assigned to it.
document.write(x)//let's print the variable x
Indéfini, c'est ce que vous obtiendrez en sortie.
Maintenant,
x=5;
y=null;
z=x+y;
et vous obtiendrez 5 en sortie. C'est la principale différence entre l' indéfini et le null
null - C'est une valeur d'affectation, qui est utilisée avec une variable pour ne représenter aucune valeur (c'est un objet).
undefined - Il s'agit d'une variable à laquelle aucune valeur ne lui est affectée, donc JavaScript lui affectera un indéfini (c'est un type de données).
non déclaré - Si une variable n'est pas créée du tout, elle est connue comme non déclarée.
De cela, j'ai appris que cela isNaN(null)revient false- ce qui m'a surpris.
J.Bruni
0
Les deux valeurs spéciales impliquent un état vide.
La principale différence est que undefined représente la valeur d'une variable qui n'a pas encore été initialisée, tandis que null représente une absence intentionnelle d'un objet.
Le numéro de variable est défini, cependant, n'est pas affecté avec une valeur initiale:
let number;
number;// => undefined
la variable numérique n'est pas définie, ce qui indique clairement une variable non initialisée
Le même concept non initialisé se produit lors de l'accès à une propriété d'objet non existante:
Étant donné que la propriété lastName n'existe pas dans obj, JavaScript évalue correctement obj.lastName à undefined.
Dans d'autres cas, vous savez qu'une variable s'attend à contenir un objet ou une fonction pour renvoyer un objet. Mais pour une raison quelconque, vous ne pouvez pas instancier l'objet. Dans un tel cas, null est un indicateur significatif d'un objet manquant.
Par exemple, clone () est une fonction qui clone un objet JavaScript simple. La fonction devrait renvoyer un objet:
Cependant, clone () peut être invoqué avec un argument non-objet: 15 ou null (ou généralement une valeur primitive, null ou indéfinie). Dans ce cas, la fonction ne peut pas créer de clone, elle renvoie donc null - l'indicateur d'un objet manquant.
L' opérateur typeof fait la distinction entre les deux valeurs:
Si une variable n'est pas initialisée, elle n'est pas définie. undefined n'est pas un objet. Exemple: var MyName; console.log (typeof MyName);
Vérifiez le journal de la console dans l'outil de développement, il sera imprimé comme non défini.
null est un objet. Si vous voulez qu'une variable soit nulle, alors null est utilisé. une variable nulle existe mais la valeur n'est pas connue. Elle doit être affectée grammaticalement à une variable pro. null n'est pas initialisé automatiquement.
Exemple: var MyName = null; console.log (typeof MyName); Vérifiez le journal de csole dans l'outil de développement, ce sera un objet.
null
valeur dans JavaScript?null
est-ce que vous le mettez à vide,undefined
il est vide parce qu'il n'a pas été défini. Ounull
est vide exprès, alors qu'ilundefined
est encore vide. Fondamentalement, cela montre l'intention.Réponses:
En JavaScript,
undefined
signifie qu'une variable a été déclarée mais n'a pas encore reçu de valeur, telle que:null
est une valeur d'affectation. Il peut être affecté à une variable comme une représentation sans valeur:D'après les exemples précédents, il est clair que
undefined
etnull
sont deux types distincts:undefined
est un type lui-même (non défini) tandis quenull
est un objet.et
la source
J'ai choisi ça d' ici
Lorsque vous déclarez une variable via var et ne lui donnez pas de valeur, elle aura la valeur indéfinie. En soi, si vous essayez d'utiliser WScript.Echo () ou alert () cette valeur, vous ne verrez rien. Cependant, si vous y ajoutez une chaîne vide, elle apparaîtra soudainement:
Vous pouvez déclarer une variable, la définir sur null et le comportement est identique sauf que vous verrez "null" imprimé contre "undefined". C'est vraiment une petite différence.
Vous pouvez même comparer une variable non définie à null ou vice versa, et la condition sera vraie:
Ils sont cependant considérés comme deux types différents. Bien qu'undefined soit un type à lui tout seul, null est considéré comme une valeur d'objet spécial. Vous pouvez le voir en utilisant typeof () qui retourne une chaîne représentant le type général d'une variable:
L'exécution du script ci-dessus entraînera la sortie suivante:
Indépendamment du fait qu'ils soient de types différents, ils agiront toujours de la même manière si vous essayez d'accéder à un membre de l'un ou l'autre, c'est-à-dire qu'ils lèveront une exception. Avec WSH, vous verrez le redouté "'varname' est nul ou pas un objet" et c'est si vous êtes chanceux (mais c'est un sujet pour un autre article).
Vous pouvez explicitement définir une variable pour qu'elle ne soit pas définie, mais je la déconseille fortement. Je recommande de définir uniquement les variables sur null et de laisser indéfinie la valeur des éléments que vous avez oublié de définir. En même temps, je vous encourage vraiment à toujours définir chaque variable. JavaScript a une chaîne de portée différente de celle des langages de style C, confondant facilement même les programmeurs chevronnés, et définir des variables sur null est le meilleur moyen d'éviter les bogues basés sur elle.
Une autre instance où vous verrez une fenêtre contextuelle non définie est lors de l'utilisation de l'opérateur de suppression. Ceux d'entre nous d'un monde C pourraient à tort interpréter cela comme détruisant un objet, mais ce n'est pas le cas. Cette opération consiste à supprimer un indice d'un tableau ou un membre d'un objet. Pour les tableaux, cela n'affecte pas la longueur, mais plutôt que l'indice est désormais considéré comme non défini.
Le résultat du script ci-dessus est:
Vous obtiendrez également un retour non défini lors de la lecture d'un indice ou d'un membre qui n'a jamais existé.
La différence entre null et undefined est: JavaScript ne définira jamais rien sur null, c'est généralement ce que nous faisons. Bien que nous puissions définir des variables sur undefined, nous préférons null car ce n'est jamais quelque chose qui est fait pour nous. Lorsque vous déboguez, cela signifie que tout ce qui est défini sur null vous appartient et non JavaScript. Au-delà, ces deux valeurs spéciales sont presque équivalentes.
la source
(l'ajout de caractères en raison du manque de caractères, donc je suis autorisé à poster ceci.)
la source
null est un mot-clé spécial qui indique une absence de valeur.
pensez-y comme une valeur, comme:
indéfini propriété indique qu'une variable n'a pas reçu de valeur incluant null aussi. Comme
la variable vide définie est
null
de type de donnéesundefined
Les deux représentent une valeur d'une variable sans valeur
ET
null
ne représente pas une chaîne sans valeur - chaîne vide -Comme
Maintenant si
MAIS
DONC chacun a sa propre façon d'utiliser
indéfini utiliser pour comparer le type de données variable
null l' utiliser pour vider une valeur d'une variable
la source
null
EST absolument un type de données: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx. Le fait que lestypeof null
retoursobject
soient un bogue bien connu et documenté dans les premières versions d'ECMAScript est resté pour la compatibilité descendante. Le lien que vous avez réellement publié dans votre commentaire indique à mi-chemin de la page "typeof null // objet (bogue dans ECMAScript, devrait être nul)"! Alors s'il vous plaît, montrez un peu d'effort de recherche avant de commenter les votesnull : absence de valeur pour une variable; indéfini : absence de variable elle-même;
La variable ..where est un nom symbolique associé à une valeur.
JS pourrait être assez aimable pour initier implicitement les nouvelles variables déclarées avec null , mais ce n'est pas le cas.
la source
var a = {}; a.n = undefined;' then ..
a.hasOwnProperty ('n') == true` ... donc dire que l' absence de variable elle - même n'est plus correctS'il vous plaît lisez avec attention. Cela supprimera tous vos doutes concernant la différence entre null et indéfini en JavaScript. Vous pouvez également utiliser la fonction utilitaire indiquée ci-dessous pour déterminer exactement les types.
En JavaScript, nous pouvons avoir les types de variables suivants.
Ce qui suit explique chacun de ces cas un par un
Variables non déclarées : ce qui suit est vrai pour les variables non déclarées
Variables déclarées mais non attribuées
Variables affectées avec un littéral non défini : ces variables sont traitées de la même manière que les variables déclarées mais non attribuées .
Variables affectées d'un littéral nul
Variables affectées avec autre chose qu'indéfini ou nul
Ce qui suit fournit l'algorithme pour la vérification de type correcte d'une variable:
Vous pouvez également utiliser la fonction utilitaire suivante pour déterminer les types. Il prend actuellement en charge tous les types ECMA 262 2017.
la source
via JavaScript: Le guide définitif
la source
Je vais vous expliquer
undefined
,null
etUncaught ReferenceError
:1 -
Uncaught ReferenceError
: la variable n'a pas été déclarée dans votre script, il n'y a aucune référence à cette variable2 -
undefined
: Variable déclarée mais non initialisée3 -
null
: Variable déclarée et est une valeur videla source
Undefined signifie qu'une variable a été déclarée mais n'a aucune valeur:
Null est une mission:
la source
null et undefined sont deux types d'objets distincts qui ont en commun les éléments suivants:
==
et!=
.Les similitudes s'arrêtent cependant ici. Pour une fois, il existe une différence fondamentale dans la façon dont les mots-clés null et undefined sont implémentés. Ce n'est pas évident, mais considérons l'exemple suivant:
indéfini , NaN et Infinity sont que des noms de variables "superglobales" préinitialisées - elles sont initialisées au moment de l'exécution et peuvent être remplacées par une variable globale ou locale normale portant les mêmes noms.
Maintenant, essayons la même chose avec null :
Oops! null , true et false sont des mots clés réservés - le compilateur ne vous permet pas de les utiliser comme noms de variable ou de propriété
Une autre différence est que undefined est un type primitif, alors que null est un type d'objet (indiquant l'absence d'une référence d'objet). Considérer ce qui suit:
En outre, il existe une différence importante dans la façon dont null et undefined sont traités dans un contexte numérique:
null devient 0 lorsqu'il est utilisé dans des expressions arithmétiques ou des comparaisons numériques - de manière similaire à false , il s'agit essentiellement d'un type spécial de "zéro". undefined , d'autre part, est un vrai "rien" et devient NaN ("pas un nombre") lorsque vous essayez de l'utiliser dans un contexte numérique.
Notez que null et undefined reçoivent un traitement spécial de la part des opérateurs
==
et!=
, mais vous pouvez tester la véritable égalité numérique de a et b avec l'expression(a >= b && a <= b)
.la source
tl; dr
Utilisez
null
pour définir une variable que vous savez qu'il s'agit d'un objet.Utilisez
undefined
pour définir une variable dont le type est mixte.Ceci est mon utilisation des 5 primitives et du type d'objet, et cela explique la différence entre «cas d'utilisation» de
undefined
ornull
.Chaîne
Si vous savez qu'une variable n'est qu'une chaîne alors que tout le cycle de vie, par convention, vous pouvez l'initialiser pour
""
:Nombre
Si vous savez qu'une variable n'est qu'un nombre alors que tout le cycle de vie, par convention, vous pouvez l'initialiser
0
(ouNaN
s'il0
s'agit d'une valeur importante dans votre utilisation):ou
Booléen
Si vous savez qu'une variable n'est qu'un booléen alors que tout le cycle de vie, par convention, vous pouvez l'initialiser pour
false
:Objet
Si vous savez qu'une variable n'est qu'un objet alors que tout le cycle de vie, par convention, vous pouvez l'initialiser pour
null
:Remarque: l'utilisation intelligente hors null doit être la version falsifiée d'un objet car un objet l'est toujours
true
et parce quetypeof null
returnobject
. Cela signifietypeof myVarObject
renvoyer une valeur cohérente pour le type Object et null.Tout
Si vous savez qu'une variable a un type mixte (n'importe quel type pendant tout le cycle de vie), par convention, vous pouvez l'initialiser à
undefined
.la source
null
est une valeur spéciale qui signifie "aucune valeur".null
est un objet spécial cartypeof null
renvoie «objet».En revanche,
undefined
signifie que la variable n'a pas été déclarée ou n'a pas reçu de valeur.la source
undefined
peut signifier qu'une variable n'a pas été déclarée, mais ne garantit pas cela. Une variable peut être déclarée commevar thing;
et elle sera égale àundefined
.La meilleure façon de comprendre la différence est de d'abord vider votre esprit du fonctionnement interne de JavaScript et de simplement comprendre les différences de sens entre:
Il y a une différence de sens entre ces trois cas, et JavaScript distingue les deux derniers cas avec deux valeurs différentes,
null
etundefined
. Vous êtes libre d'utiliser ces valeurs explicitement pour transmettre ces significations.Alors, quels sont les problèmes spécifiques à JavaScript qui se posent en raison de cette base philosophique?
Une variable déclarée sans initialiseur obtient la valeur
undefined
car vous n'avez jamais rien dit sur la valeur prévue.Une propriété d'un objet qui n'a jamais été définie est évaluée
undefined
car personne n'a jamais rien dit sur cette propriété.null
etundefined
sont "similaires" les uns aux autres parce que Brendan Eich l'a dit. Mais ils ne sont absolument pas égaux entre eux.null
etundefined
heureusement avoir différents types.null
appartient au typeNull
etundefined
au typeUndefined
. C'est dans la spécification, mais vous ne le sauriez jamais à cause de l'typeof
étrangeté que je ne répéterai pas ici.Une fonction atteignant la fin de son corps sans une déclaration de retour explicite renvoie
undefined
puisque vous ne savez rien de ce qu'elle a renvoyé.Soit dit en passant, il existe d'autres formes de "néant" en JavaScript (c'est bien d'avoir étudié la philosophie ...)
NaN
ReferenceError
let
ouconst
définie dans sa zone morte temporelle et recevoir unReferenceError
Cellules vides dans des tableaux clairsemés. Oui, ce ne sont même pas
undefined
bien qu'ils se comparent===
à indéfinis.la source
undefined
, comme dans lelet supervisor = undefined
cas.undefined
que si elle n'a pas été déclarée ou n'a pas encore reçu de valeur est si répandue et il est vraiment difficile de communiquer avec les gens (bien que je continue d'essayer). Tant de gens JavaScript pour avoir la poubelle à la foisnull
et ,undefined
mais ces valeurs n'ont des significations complètement distinctes et pour la plupart ils travaillent bien avec leurs significations prévues (IMHO bien sûr).Dans JavasSript, il existe 5 types de données primitifs String, Number, Boolean, null et undefined. Je vais essayer d'expliquer avec un exemple simple
disons que nous avons une fonction simple
également dans la fonction ci-dessus si (a == null) est le même que si (! a)
maintenant, quand nous appelons cette fonction sans passer le paramètre a
aussi
cela donnera indéfini; nous avons déclaré une variable mais nous n'avons attribué aucune valeur à cette variable; mais si on écrit
donc null est un objet. d'une certaine manière, nous avons attribué une valeur nulle à «a»
la source
Pour le
undefined
type, il existe une et une seule valeur:undefined
.Pour le
null
type, il existe une et une seule valeur:null
.Donc pour les deux, le label 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'a plusEn fait,
null
est un mot-clé spécial - , pas un identifiant, et donc vous ne pouvez pas le traiter comme une variable à affecter.Cependant,
undefined
c'est un identifiant . Ennon-strict
mode et enstrict
mode, cependant, vous pouvez créer une variable locale du nom non défini. Mais c'est une terrible idée!la source
Lorsque vous déclarez une variable en javascript, la valeur lui est affectée
undefined
. Cela signifie que la variable est intacte et peut être affectée à n'importe quelle valeur à l'avenir. Cela implique également que vous ne connaissez pas la valeur que cette variable va contenir au moment de la déclaration.Vous pouvez maintenant attribuer explicitement une variable
null
. Cela signifie que la variable n'a aucune valeur. Par exemple - Certaines personnes n'ont pas de deuxième prénom. Dans un tel cas, il est donc préférable d'affecter la valeur null à la variable de nom intermédiaire d'un objet personne.Supposons maintenant que quelqu'un accède à la variable middlename de votre objet person et qu'elle ait la valeur
undefined
. Il ne saurait pas si le développeur a oublié d'initialiser cette variable ou si elle n'a aucune valeur. S'il a la valeurnull
, alors l'utilisateur peut facilement déduire que le nom intermédiaire n'a aucune valeur et qu'il ne s'agit pas d'une variable intacte.la source
null et undefined sont tous deux utilisés pour représenter l'absence d'une certaine valeur.
a est initialisé et défini.
null est un objet en JavaScript
b n'est pas défini et n'est pas initialisé
les propriétés d'objet non définies ne sont pas non plus définies. Par exemple, "x" n'est pas défini sur l'objet c et si vous essayez d'accéder à cx, il retournera non défini.
Généralement, nous attribuons null à des variables non indéfinies.
la source
Object.prototype.toString.call(null); // "[object Null]"
Par l'article complet de Ryan Morr sur ce sujet ...
"En général, si vous devez attribuer une non-valeur à une variable ou à une propriété, la transmettre à une fonction ou la renvoyer à partir d'une fonction, null est presque toujours la meilleure option. Pour le dire simplement, JavaScript utilise undefined et les programmeurs doivent utilisez null. "
Voir Exploration de l'abîme éternel de nul et indéfini
la source
Référence: http://www.thesstech.com/javascript/null-and-undefined
la source
OK, nous pouvons être confus lorsque nous en entendons parler
null
etundefined
, mais commençons simplement, ils sont tous deux faux et similaires à bien des égards, mais une partie étrange de JavaScript, en fait quelques différences importantes, par exemple, typeofnull
est'object'
tandis que typeofundefined
est'undefined'
.Mais si vous les vérifiez
==
comme ci-dessous, vous voyez qu'ils sont tous les deux faux :Vous pouvez également affecter
null
à une propriété d'objet ou à une primitive, tout enundefined
simplement atteint en n'attribuant à rien.Je crée une image rapide pour vous montrer les différences en un coup d'œil.
la source
Comme typeof renvoie undefined, undefined est un type où comme null est un initialiseur indique que la variable ne pointe vers aucun objet (pratiquement tout en Javascript est un objet).
la source
En javascript, toutes les variables sont stockées sous forme de paires de valeurs clés. Chaque variable est stockée sous nom_variable: valeur_variable / référence .
undefined signifie qu'une variable a reçu un espace en mémoire, mais aucune valeur ne lui est affectée. En tant que meilleure pratique, vous ne devez pas utiliser ce type comme affectation.
Dans ce cas, comment indiquer quand vous souhaitez qu'une variable soit sans valeur à un stade ultérieur du code? Vous pouvez utiliser le type null , qui est également un type utilisé pour définir la même chose, l'absence de valeur, mais ce n'est pas la même chose que non défini, car dans ce cas, vous avez réellement la valeur en mémoire. Cette valeur est nulle
Les deux sont similaires mais l'usage et le sens sont différents.
la source
Je veux ajouter une différence très subtile entre
null
etundefined
ce qui est bon à savoir lorsque vous essayez d'apprendre de Vanilla JavaScript (JS) de fond en comble:null
est un mot clé réservé dans JS whileundefined
est une variable sur l'objet global de l'environnement d'exécution dans lequel vous vous trouvez.Lors de l'écriture de code, cette différence n'est pas identifiable comme les deux
null
etundefined
est toujours utilisée dans RHS d'une instruction JavaScript. Mais lorsque vous les utilisez dans LHS d'une expression, vous pouvez facilement observer cette différence. L'interpréteur JS interprète donc le code ci-dessous comme une erreur:Il donne l'erreur ci-dessous:
Bien que le code ci-dessous fonctionne correctement, je ne le recommanderai pas dans la vraie vie:
Cela fonctionne car il
undefined
s'agit d'une variable sur l'objet global (objet de fenêtre de navigateur en cas de JS côté client)la source
undefined='bar'
n'attribue pas vraiment de valeur àundefined
(qui est immuable), il ne lance simplement pas d'erreur de manière confuse.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ée. Une variable dont la valeur estnull
a reçu explicitement une valeur denull
, ce qui signifie que la variable a été explicitement définie pour n'avoir aucune valeur. Si vous comparezundefined
etnull
en utilisant l'null==undefined
expression, ils seront égaux.la source
null==undefined
c'esttrue
uniquement en raison de la fonte implicite (ou du terme équivalent dans JS). Évidemment,null===undefined
c'estfalse
parce que l'utilisation lorsque vous l'utilisez===
compare également le type .Fondamentalement, Undefined est une variable globale que javascript crée au moment de l'exécution, que null signifie qu'aucune valeur n'a été attribuée à la variable (en fait, null est lui-même un objet).
Prenons un exemple:
Indéfini, c'est ce que vous obtiendrez en sortie.
Maintenant,
et vous obtiendrez 5 en sortie. C'est la principale différence entre l' indéfini et le null
la source
null - C'est une valeur d'affectation, qui est utilisée avec une variable pour ne représenter aucune valeur (c'est un objet).
undefined - Il s'agit d'une variable à laquelle aucune valeur ne lui est affectée, donc JavaScript lui affectera un indéfini (c'est un type de données).
non déclaré - Si une variable n'est pas créée du tout, elle est connue comme non déclarée.
la source
Regarde ça. La sortie vaut mille mots.
Voir également:
À votre santé!
la source
isNaN(null)
revientfalse
- ce qui m'a surpris.Les deux valeurs spéciales impliquent un état vide.
La principale différence est que undefined représente la valeur d'une variable qui n'a pas encore été initialisée, tandis que null représente une absence intentionnelle d'un objet.
Dans d'autres cas, vous savez qu'une variable s'attend à contenir un objet ou une fonction pour renvoyer un objet. Mais pour une raison quelconque, vous ne pouvez pas instancier l'objet. Dans un tel cas, null est un indicateur significatif d'un objet manquant.
Par exemple, clone () est une fonction qui clone un objet JavaScript simple. La fonction devrait renvoyer un objet:
Cependant, clone () peut être invoqué avec un argument non-objet: 15 ou null (ou généralement une valeur primitive, null ou indéfinie). Dans ce cas, la fonction ne peut pas créer de clone, elle renvoie donc null - l'indicateur d'un objet manquant.
la source
En plus d'une signification différente, il existe d'autres différences:
null
mais ometundefined
la source
Si une variable n'est pas initialisée, elle n'est pas définie. undefined n'est pas un objet. Exemple: var MyName; console.log (typeof MyName);
Vérifiez le journal de la console dans l'outil de développement, il sera imprimé comme non défini.
null est un objet. Si vous voulez qu'une variable soit nulle, alors null est utilisé. une variable nulle existe mais la valeur n'est pas connue. Elle doit être affectée grammaticalement à une variable pro. null n'est pas initialisé automatiquement.
Exemple: var MyName = null; console.log (typeof MyName); Vérifiez le journal de csole dans l'outil de développement, ce sera un objet.
la source