¿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í?

Author: Community, 2011-09-17

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 0volverá 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.

 859
Author: Peter Olson,
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";
 83
Author: epascarello,
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.

 26
Author: Digital Plane,
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