Quand dois-je initialiser des variables dans JavaScript avec null ou pas du tout?

j'ai vu des exemples de code différents avec des variables déclarées et réglées à non défini et null. Tels que:

var a; // undefined - unintentional value, object of type 'undefined'
var b = null; // null - deliberate non-value, object of type 'object'

si le code qui suit ces déclarations attribue une valeur à A ou à b, pourquoi utiliser un type de déclaration plutôt qu'un autre?

29
demandé sur phant0m 2012-10-30 19:56:52

5 réponses

le premier exemple n'attribue rien à la variable, de sorte qu'il renvoie implicitement à la valeur undefined (voir 10.5 dans la spécification pour les détails). Il est couramment utilisé lors de la déclaration de variables pour une utilisation ultérieure. Il n'est pas nécessaire d'affecter explicitement quelque chose avant nécessaire.

le second exemple est explicitement attribué à null (qui est en fait de type null , mais en raison d'une bizarrerie du JavaScript spécification, revendications d'avoir le type "objet"). Il est couramment utilisé pour effacer une valeur stockée dans une variable existante. Il pourrait être considéré comme plus robuste d'utiliser null pour effacer la valeur puisqu'il est possible d'écraser undefined , et dans cette situation assiger undefined entraînerait un comportement inattendu.

comme une mise à part, ce quirk de null est une bonne raison d'utiliser une forme plus robuste de vérification de type:

Object.prototype.toString.call(null); // Returns "[object Null]"
24
répondu James Allardice 2012-10-30 16:00:18

Je ne pense pas qu'il y ait une meilleure façon de faire les choses, mais je suis enclin à éviter indéfini autant que possible. Peut-être que c'est dû à un fort passé D'OOP.

quand j'essaie d'imiter OOP avec Javascript, je déclare et initialise généralement explicitement mes variables à null (comme le font les langues OOP quand vous déclarez une variable d'instance sans l'initialiser explicitement). Si je ne vais pas les initialiser, pourquoi même les déclarer en premier lieu? Lorsque vous déboguez, si vous n'avez pas défini de valeur pour une variable que vous regardez, vous la verrez comme non définie que vous l'ayez déclarée ou non...

je préfère le garder undefined pour les comportements spécifiques:

  • lorsque vous appelez une méthode, tout argument que vous ne fournissez pas aurait une valeur non définie. Bonne façon d'avoir un argument optionnel, mettre en œuvre un comportement spécifique si l'argument n'est pas défini.
  • paresseux init... dans mon livre undefined signifie "non initialisé: allez chercher la valeur", et null signifie " initialisé mais la valeur était nulle (par exemple, il y avait peut-être une erreur de serveur?) "
  • tableaux: myArray[myKey] = = = null s'il y a une valeur nulle pour cette clé, non défini si une valeur n'a jamais été définie pour cette clé.

attention cependant, que myVar == null et myVar == undefined renvoient la même valeur que myVar soit indéfini, nul ou autre. Utilisez === si vous voulez pour savoir si une variable n'est pas définie.

10
répondu Evren Kuzucuoglu 2012-10-30 16:11:42

je viens de voir ce lien qui clarifie ma question. quelle raison y a-t-il à utiliser null au lieu de non défini dans JavaScript?

Javascript for Web Developers states " lors de la définition d'une variable qui est destinée à contenir plus tard un objet, il est conseillé d'initialiser la variable à null par opposition à toute autre chose. De cette façon, vous pouvez vérifier explicitement la valeur null pour déterminer si la variable a été remplie avec une référence d'objet à un plus tard."

6
répondu KMcA 2017-05-23 12:18:10

je choisirais explicitement null, pour ne pas avoir un objet dont l'id plus tard aurait été écrasé de toute façon:

var foo = {}; // empty object, has id etc.
var foo2 = null; // good practice, // filled with an object reference at a later time
var foo3;// undefined, I would avoid it
console.log(typeof foo);
console.log(typeof foo2);
console.log(typeof foo3);

null assure également une bonne lisibilité pour identifier le type de données (objet), résultats en

object
object
undefined

Source (JavaScript Professionnel pour les développeurs Web 3e édition):

lors de la définition D'une variable qui est destiné à contenir plus tard un objet, il est conseillé pour initialiser la variable à null par opposition à n'importe quoi autre. De cette façon, vous pouvez vérifier explicitement la valeur null to déterminer si la variable a été remplie avec un objet de référence à plus tard, comme dans cet exemple:

if (foo2 != null){
    //do something with foo2
}

la valeur non définie est une dérivée de null, donc ECMA-262 Les définit comme étant superficiellement égales comme suit:

console.log(null == undefined); // prints true
console.log(null === undefined);// prints false
1
répondu ItsmeJulian 2017-05-31 13:30:34

null est un objet.. Quand quelque chose n'est pas défini, ce n'est rien.. ce n'est pas un objet, ni une chaîne, parce qu'il n'a pas encore été défini.. évidemment.. alors il vous est simplement une propriété sans fonction..

exemple:

vous déclarez une variable avec var mais ne la définissez jamais.

var foo; 
alert(foo); //undefined.

Vous tentez d'accéder à une propriété d'un objet que vous n'avez jamais ensemble.

var foo = {};
alert(foo.bar); //undefined

vous tentez d'accéder un argument qui n'a jamais été fournie.

function myFunction (foo) {
  alert(foo); //undefined.
}
0
répondu Dimser 2012-10-30 16:06:29