594 votes

Que signifie "vide 0" ?

En lisant le code source de Backbone.js, j'ai vu ceci :

validObj[attr] = void 0;

Qu'est-ce que void 0 ? Quel est l'intérêt de l'utiliser ici ?

13 votes

La question liée à "void(0)" n'est pas très claire sur le fait que void est un mot-clé spécial dont la syntaxe est unique. Je n'avais aucune idée que void(0) y void 0 étaient le même mot-clé jusqu'à ce que je trouve cette question.

1180voto

Peter Olson Points 30452

Qu'est-ce que void 0 signifier ?

void [MDN] est un mot-clé préfixe qui prend un argument et renvoie toujours undefined .

Exemples

void 0
void (0)
void "hello"
void (new Date())
//all will return undefined

Quel est l'intérêt de cette démarche ?

Cela semble plutôt inutile, n'est-ce pas ? S'il renvoie toujours undefined Pourquoi ne pas se contenter d'utiliser undefined elle-même ?

Dans un monde parfait, nous pourrions utiliser en toute sécurité la fonction undefined : c'est beaucoup plus simple et plus facile à comprendre que void 0 . Mais au cas où vous ne l'auriez jamais remarqué auparavant, le monde n'est pas parfait surtout lorsqu'il s'agit de Javascript.

Le problème de l'utilisation de undefined était que undefined n'est pas un mot réservé ( il s'agit en fait d'une propriété de l'objet global [wtfjs] ). C'est-à-dire, undefined est un nom de variable autorisé, vous pouvez donc lui attribuer une nouvelle valeur à votre guise.

alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"

Note : Ceci n'est plus un problème dans tous les environnements qui supportent ECMAScript 5 ou plus récent (c'est-à-dire en pratique partout sauf dans IE 8), qui définit l'attribut undefined de l'objet global en lecture seule (il n'est donc possible d'observer la variable que dans sa propre portée locale). Cependant, cette information est toujours utile à des fins de compatibilité ascendante.

alert(window.hasOwnProperty('undefined')); // alerts "true"
alert(window.undefined); // alerts "undefined"
alert(undefined === window.undefined); // alerts "true"
var undefined = "new value";
alert(undefined); // alerts "new value"
alert(undefined === window.undefined); // alerts "false"

void par contre, ne peut pas être surchargé. void 0 volonté toujours retour undefined . undefined En revanche, il peut être ce que M. Javascript décide qu'il veut qu'il soit.

Pourquoi void 0 , en particulier ?

Pourquoi devrions-nous utiliser void 0 ? Qu'y a-t-il de si spécial dans 0 ? Ne pourrions-nous pas tout aussi bien utiliser 1 ou 42 ou 1000000 ou "Hello, world!" ?

Et la réponse est oui, nous pourrions le faire, et cela fonctionnerait tout aussi bien. Le seul avantage de passer en 0 au lieu d'un autre argument, c'est que 0 est courte et idiomatique.

Pourquoi est-ce toujours d'actualité ?

Bien que undefined sont généralement fiables dans les environnements JavaScript modernes, il y a un avantage trivial à l'utilisation du void 0 il est plus court. La différence n'est pas suffisante pour s'inquiéter lors de l'écriture du code, mais elle peut s'accumuler suffisamment sur de grandes bases de code pour que la plupart des minifieurs de code remplacent le code d'origine par un nouveau code. undefined avec void 0 pour réduire le nombre d'octets envoyés au navigateur.

0 votes

@PeterOlson le principal avantage de la void 0 est que la 0 est la norme de facto pour l'utilisation des void pour générer un undefined valeur.

0 votes

Premièrement, undefined n'est pas un mot-clé, c'est juste une propriété de l'objet global. Deuxièmement, dans ECMAScript5, il est protégé en écriture, de sorte que la propriété void 0 L'astuce n'est nécessaire que si quelqu'un utilise undefined en tant que variable locale dans une fonction.

0 votes

@Pumbaa80 A moins d'utiliser le mode strict, l'astuce est de ne pas utiliser le mode strict. est nécessaire car la plupart des navigateurs autorisent les undefined d'être muté.

128voto

epascarello Points 71353

void 0 renvoie une valeur indéfinie et ne peut pas être écrasée alors que undefined peut être écrasée.

var undefined = "HAHA";

30 votes

ECMAScript 5 définit undefined comme étant en lecture seule

2 votes

@licancabur : Je crois que c'est uniquement dans le code en mode strict, oui ?

68 votes

Wow, je n'arrête pas de recevoir des downvotes sur ce sujet. Lorsque ce texte a été publié il y a 3 ans, les navigateurs permettaient de donner n'importe quelle valeur à undefined.

42voto

Digital Plane Points 11741

void est un mot-clé JavaScript réservé. Il évalue l'expression et renvoie toujours undefined .

8 votes

Il est probablement plus court que undefined et il est également garanti qu'il sera retourné (contrairement à l'option globale réinscriptible undefined ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X