javascript void(0);javascript:void(0); - ¿Qué significa 'void 0'?




=' href (4)

Posible duplicado:
¿Qué significa "javascript: void (0)"?

Leyendo el código fuente de Backbone.js, vi esto:

validObj[attr] = void 0;

¿Qué es el void 0 ? ¿Cuál es el propósito de usarlo aquí?


Answers

void 0 devuelve undefined y no se puede sobrescribir mientras que undefined se puede sobrescribir.

var undefined = "HAHA";

¿Qué significa void 0 ?

void[MDN] es una palabra clave de prefijo que toma un argumento y siempre devuelve undefined .

Ejemplos

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

¿Cual es el punto de eso?

Parece bastante inútil, ¿no? Si siempre devuelve undefined , ¿qué hay de malo con el uso de undefined ?

En un mundo perfecto podríamos usar de forma segura undefined : es mucho más simple y fácil de entender que el void 0 . Pero en caso de que nunca lo hayas 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 puede 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 admita ECMAScript 5 o más nuevo (es decir, en la práctica en todas partes excepto en IE 8), que define la propiedad undefined del objeto global como de solo lectura (por lo tanto, solo es posible sombrear la variable) en su propio ámbito local). Sin embargo, esta información sigue siendo útil para propósitos 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 puede ser anulado. void 0 siempre volverá undefined . undefined , por otro lado, puede ser lo que sea que el Sr. Javascript decida que quiere que sea.

¿Por qué void 0 , específicamente?

¿Por qué deberíamos usar void 0 ? ¿Qué tiene de especial el 0 ? ¿No podríamos usar fácilmente 1 , 42 , 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 generalmente undefined se puede confiar en undefined en los entornos modernos de JavaScript, hay una ventaja trivial del void 0 : es más corto. 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 la cantidad de bytes enviados al navegador.


void es una palabra clave reservada de JavaScript. Evalúa la expresión y siempre devuelve undefined .


Si lo está utilizando, la biblioteca Underscore.js tiene un método de clone .

var newObject = _.clone(oldObject);




javascript backbone.js