¿Qué significa 'void 0'? [duplicar]
Posible Duplicado:
¿Qué significa "javascript:void(0)"?
Leyendo a través de la Columna Vertebral.código fuente de js, vi esto:
validObj[attr] = void 0;
¿Qué es void 0
? ¿Cuál es el propósito de usarlo aquí?
3 answers
¿Qué significa void 0
?
void
[MDN] es una palabra clave prefijo que toma un argumento y siempre devuelve undefined
.
Ejemplos
void 0
void (0)
void "hello"
void (new Date())
//all will return undefined
¿Cuál es el punto de eso?
Parece bastante inútil, ¿no? Si siempre devuelve undefined
, ¿qué hay de malo en usar solo undefined
?
En un mundo perfecto podríamos usar con seguridad undefined
: es mucho más simple y más fácil de entender que void 0
. Pero en caso de que nunca antes lo había notado, este no es un mundo perfecto , especialmente cuando se trata de Javascript.
El problema con el uso de undefined
fue que undefined
no es una palabra reservada (en realidad, es una propiedad del objeto global [wtfjs]). Es decir, undefined
es un nombre de variable permitido, por lo que podría asignarle un nuevo valor a su propio capricho.
alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"
Nota: Esto ya no es un problema en ningún entorno que soporte ECMAScript 5 o posterior (es decir, en la práctica everywhere but IE 8), que define la propiedad undefined
del objeto global como de solo lectura (por lo que solo es posible sombrear la variable en su propio ámbito local). Sin embargo, esta información sigue siendo útil para fines de compatibilidad con versiones anteriores.
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
, por otro lado, no se puede sobreescribir. void 0
volverá siempre undefined
. undefined
, por otro lado, puede ser lo que el Sr. Javascript decida que quiere que sea.
¿Por qué void 0
, específicamente?
¿Por qué debería utilizamos void 0
? ¿Qué tiene de especial 0
? ¿No podríamos usar 1
, o 42
, o 1000000
o "Hello, world!"
?
Y la respuesta es, sí, podríamos, y funcionaría igual de bien. El único beneficio de pasar 0
en lugar de algún otro argumento es que 0
es corto e idiomático.
¿Por qué esto sigue siendo relevante?
Aunque undefined
generalmente se puede confiar en entornos JavaScript modernos, hay una ventaja trivial de void 0
: es más corto. El la diferencia no es suficiente para preocuparse al escribir código, pero puede sumar lo suficiente sobre bases de código grandes que la mayoría de los minificadores de código reemplazan undefined
con void 0
para reducir el número de bytes enviados al navegador.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-07 21:52:47
void 0
devuelve indefinido y no se puede sobrescribir mientras que undefined
se puede sobrescribir.
var undefined = "HAHA";
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-17 04:20:46
void
es una palabra clave de JavaScript reservada. Evalúa la expresión y siempre devuelve undefined
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-18 17:41:43