used - void(0) javascript href
var x, y=''foo''; ¿Se puede lograr esto? (10)
A continuación está mi función de prueba. La línea actualmente no comentada en la función de contaminar hace lo que estabas buscando. Puedes probarlo y las otras opciones en jsfiddle aquí .
var originalXValue = ''ekis'';
var originalYValue = ''igriega'';
var x = ''ekis'';
var y = ''igriega'';
function pollute()
{
// Uncomment one of the following lines to see any pollution.
// x = ''ex''; y = ''why''; // both polluted
// var x = ''ex''; y = ''why''; // y was polluted
// var x = y = ''shared-ex''; // y was polluted
var x = ''oneline'', y = x; // No pollution
// var x = ''ex'', y = ''ex''; // No pollution
document.write(''Pollution function running with variables<br/>'' +
''x: '' + x + ''<br/>y: '' + y + ''<br/><br/>'');
}
pollute();
if (x !== originalXValue && y !== originalYValue)
{
document.write(''both polluted'');
}
else if (x !== originalXValue)
{
document.write(''x was polluted'');
}
else if (y !== originalYValue)
{
document.write(''y was polluted'');
}
else
{
document.write(''No pollution'');
}
Como es posible hacer:
var x = ''foo'', y = ''foo'';
¿Esto también sería posible?
var x, y = ''foo'';
Lo intenté, sin embargo, x no se define.
Sé que esto puede parecer una pregunta tonta o redundante, pero si tengo curiosidad por algo, ¿por qué no preguntar? También es probable que se pregunte por qué necesitaría dos variables iguales al mismo alcance . Ese no es el punto de la pregunta. Tengo curiosidad.
Evitaría ser tramposo. Como solo uso una variable por var
(y una declaración por línea) es muy fácil mantenerlo simple:
var x = "hello"
var y = x
Agradable, simple y sin problemas tontos, como se discutió en las otras respuestas y comentarios.
Feliz codificación.
Me pregunto por qué nadie publicó eso todavía, pero puedes hacer esto
var x, y = (x = ''foo'');
Necesita dos declaraciones separadas para obtener exactamente la misma semántica.
var x, y; x = y = ''foo'';
// or
var x = ''foo''; var y = x;
// or
var y; var x = y = ''foo'';
La solución que otros usuarios sugieren no es equivalente, ya que no aplica la var
a y
. Si hay una variable global y
, se sobrescribirá.
// Overwrites global y
var x = y = ''foo'';
Es una buena práctica aplicar correctamente var
a las variables locales y no omitirlo en aras de la brevedad.
No estoy seguro de si esto es lo que está preguntando, pero si quiere decir "¿Puedo asignar dos variables al mismo literal en una línea sin escribir el literal dos veces?" Entonces la respuesta es sí:
var x = 10, y = x;
No puedes hacer
var a = b = "abc";
porque en ese caso, b se convertirá en una variable global.
Debe tener en cuenta que declarar una variable sin var lo hace global. Entonces, es bueno si sigues uno a uno
var a = "abc";
var b = a;
Para que eso funcione, deberá inicializarlos por separado (como su primer ejemplo) o deberá configurarlos en una declaración separada.
// This causes bugs:
var x = y = ''test'';
Reloj:
var y = 3;
function doSomething(){ var x = y = ''test''; }
doSomething();
console.log( y ); // test !?
Por otra parte:
// this does not
var x,y; x = y = ''test'';
Reloj:
var y = 3;
function doSomething(){ var x,y; x = y = ''test''; }
doSomething();
console.log( y ); // 3 -- all is right with the world.
Tenga en cuenta que aunque
var x = y = ''test'';
es javascript legal
En un contexto estricto (como este ejemplo):
function asdf() {
''use strict'';
var x = y = 5;
return x * y;
}
asdf();
Conseguirás:
ReferenceError: assignment to undeclared variable y
para que funcione sin error necesitarías
var x, y;
x = y = 5;
Utilizaría var x, y = ''foo'' cuando quiera inicializar explícitamente x a undefined y desee restringir el alcance de x.
function foo() {
var x, y = ''value'';
// ...
x = 5;
// ...
}
// Neither x nor y is visible here.
Por otro lado, si dijiste:
function foo() {
var y = ''value'';
// ...
x = 5;
// ...
}
// y is not visible here, but x is.
Espero que esto ayude.
Fuente: http://www.mredkj.com/tutorials/reference_js_intro_ex.html
Tu puedes hacer
var x = y = ''test''; // Edit: No, don''t do this
EDITAR
Me acabo de dar cuenta de que esto crea / sobrescribe y
como una variable global, ya que y
no está precedida inmediatamente por la palabra clave var
. Entonces, básicamente, si está en una función, dirías "la variable local x
es igual a la variable global y es igual a ...". Entonces, usted contaminará el alcance global o asignará un nuevo valor a una variable global y
existente. No está bien.
Lamentablemente, no puedes hacer
var x = var y = ''test''; // Syntax error
Entonces, en cambio, si no quieres contaminar el alcance global (¡y tú no!), Puedes hacer
var x, y;
x = y = ''test'';