Una sinfonía en C#

Un pequeño aporte a la comunidad de habla hispana.

Tips de Javascript: por qué se usa void(0)?

Muchas veces nos encontramos que en un elemento a (un link) se poner por defecto el valor del atributo href = javascript: void(0); lo cual es, al menos, llamativo, si no queremos hacer nada simplemente podríamos usar href= javascript:undefined, o no?

Undefined no siempre es lo que parece

Antes que nada vale aclarar que hay dos undefined en Javascript, el tipo, es decir, así como decimos que algo es un objeto, decimos que algo es undefined y también hay una variable global (una propiedad de window, es decir window.undefined)

Probemos este script

<html>
<head></head>
<body>
<script type="text/javascript">

undefined = 1;
var uno = 1;

console.log( uno == undefined);

</script>
</body>
</html>

Es claro que debería dar false (es decir no podemos decir que undefined vale 1, hablamos de la propiedad de window, entonces la comparación uno == undefined debería ser false). Sin embargo esto no es cierto para navegadores no tan viejos, por ejemplo IE8 (la versión más nueva que se puede usar en Windows XP, podemos comprobar esto usando el modo de emulación de IE10 y 11).

Si bien recientemente la especificación de ECMA script dice que la window.undefined es readonly esto no fue siempre así, entonces nada nos impedía (en navegadores no tan viejos, FF 6, Chrome 14, Safari 5, IE 8) hacer algo como

undefined = 1;

y listo, toda comparación contra undefined dejaba de funcionar correctamente, pero por qué alguien querría hacer eso? no lo sabemos, pero se puede.

Void siempre retorna undefined

Es así, el método void() siempre retorna el tipo undefined, la pregunta es por qué pasarle 0 como parámetro?, esto tal vez se deba a una cuestión semántica, es decir, queremos pasarle un valor para llamar la función y qué mejor que pasarle un cero si lo que realmente queremos es usarla para saber que algo no tiene un valor definido (esta parte la supongo, realmente no tengo idea)

Bueno, eso, nos leemos.

Loading