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 ?
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 ?
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
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.
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.
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.
@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.
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.
@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é.
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.
void
est un mot-clé JavaScript réservé. Il évalue l'expression et renvoie toujours undefined
.
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.
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 quevoid(0)
yvoid 0
étaient le même mot-clé jusqu'à ce que je trouve cette question.