2009-03-20 20 views
43

He visto a algunas personas usar el operador void en su código. También he visto esto en href atributos: javascript:void(0) que no parece nada mejor que javascript:;¿Cuál es el punto del operador nulo en JavaScript?

Así que, ¿cuál es la justificación del uso del operador void?

+3

void es un operador que no devuelve nada después de evaluar una expresión determinada, no necesita usar "(" y ")" para que funcione. – Cleiton

+0

sizeof es lo mismo en C, pero ese código es mucho más claro si se utilizan paréntesis. – olliej

+0

'void' se usa con poca frecuencia. En ES5 se considera obsoleto. Después de la evaluación de su operando, devuelve 'undefined' – jjpcondor

Respuesta

46

Explanation of its use in links:

<snip>

Ésta es la razón por la que bookmarklets menudo envuelven el código dentro de vacío() o una función anónima que no devuelve nada para detener el navegador de tratando de mostrar el resultado de ejecutando el bookmarklet. Para ejemplo:

javascript:void(window.open("dom_spy.html")) 

Si utiliza directamente el código que devuelve algo (una nueva instancia de la ventana en este caso), el navegador va a terminar mostrando que:

javascript:window.open("dom_spy.html"); 

En Firefox la por encima de la pantalla voluntad:

[object Window] 

</snip>

+0

Vea también [MDN del operador nulo docs] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void). –

10

considerar lo siguiente:

<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a> 

<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a> 

<input type="text" id="foo" value="one fish" /> 
<input type="text" id="bar" value="no fish" /> 

El primer enlace intercambiará los valores de los campos de texto. El segundo enlace abrirá una nueva página con el texto "un pez". Si usa un javascript: link, el minuto en que una expresión devuelva algo distinto de null o undefined, el navegador lo interpretará como lo que debería hacer el enlace. Al envolver todas las expresiones/declaraciones en una función void(), se asegura de que se ejecute todo el fragmento de código. Hoy en día, esto se usa principalmente en Bookmarklets, ya que el uso de un atributo onclick, o la configuración de controladores de eventos en bloques/archivos Javascript separados es la "norma".

En cuanto a javascript: vs javascript:void(), la primera declaración es ambigua. Usted está diciendo, "oye, quiero ejecutar algunos javascript", pero luego no proporciona ningún código. No está necesariamente claro qué debe hacer el navegador aquí. Con la segunda afirmación, dices "hey, ejecuta algunos javascript", y tu código finalmente devuelve indefinido, lo que el navegador sabe significa "no hacer nada".

Como estoy aquí, también señalaré que usar javascript: o javascript:void(); ha caído en desgracia con la mayoría de las personas que se preocupan por el marcado. Lo mejor que puede hacer es hacer que su manejador onclick devuelva false, y hacer que el enlace apunte hacia una página/recurso que tenga sentido para las personas que tienen javascript desactivado, o si están usando un bloqueador de JavaScript como NoScript.

+0

El autor de la pregunta escribió "javascript :;", no "javascript:". Entonces, no sería ambiguo en ese caso, ¿verdad? –

+0

¿Alguna declaración vacía devuelve falso o devuelve verdadero, lo que indica que la instrucción se ejecutó correctamente? –

+1

¿Por qué una declaración vacía devolvería algo? –

4

El valor undefined no fue accesible directamente en JavaScript hasta ES1.3.

Por lo tanto, se ha incluido un operador void <expression> para permitir el acceso a este valor.

A veces resulta útil, especialmente cuando se trabaja con la API web (por ejemplo, controladores de eventos), para garantizar que el resultado de una expresión sea consistentemente undefined.

Cuando la propiedad undefined se agregó al objeto global en ES1.3 la utilidad de void no se volvió obvia.

De ahí su pregunta.

+0

Downvoter, por favor explique? – Ben

Cuestiones relacionadas