w3schools tag tab change javascript

tag - Javascript a=b=declaraciones c



title html w3schools (6)

Busqué en Internet, pero no pude encontrar un criterio de búsqueda relevante, así que pensé que este sería el mejor lugar para preguntar.

Tengo una declaración JS diciendo

document.location.hash = this.slug = this.sliceHashFromHref(href)

¿¿Como funciona esto??


¿¿Como funciona esto??

a = b puede verse tanto como una declaración como una expresión .

El resultado de la expresión es b .

En otras palabras,

a = b = c;

que se puede escribir como

a = (b = c);

es equivalente a

b = c; a = b;

Por lo tanto su código es equivalente a:

this.slug = this.sliceHashFromHref(href); document.location.hash = this.slug;


¡Esté atento al alcance de las variables!

var A = B = C = 3; //A is local variable while B & C are global variables; var A = 3 , B = 3, C = 3;// A B C are local variables;


Bastante fácil ... Asigna el resultado de la llamada a this.sliceHashFromHref(href) a document.location.hash y this.slug , por lo que ambas propiedades (variables) contienen el mismo valor después de que se haya ejecutado la línea.


En Javascript (y en varios otros idiomas que derivan su sintaxis de C), una asignación evalúa el elemento a la derecha del símbolo = y lo asigna a la variable de la izquierda. El elemento de la derecha puede ser una asignación con un operador =. Lo que sucede es que se evalúa la expresión más a la derecha, el valor asignado a la variable del medio, y luego ese valor se asigna a la variable de la izquierda.

En resumen, es simplemente una forma de asignar un valor a varias variables a la vez.


En realidad, la respuesta de Ma Jerez hace un punto muy importante aquí. también esta respuesta se refiere a esta question similar: esta pregunta involucra algunas cosas:

  1. elevador: las variables se elevan antes de la ejecución del código de bloque;
  2. = orden de asignación: va de derecha a izquierda;
  3. contexto global: en modo no estricto, cuando una variable no está definida, va al contexto global; pero lanzará en modo de "uso estricto";

Ejemplo 1:

;(function Anonymous(){ var a = b = {}; console.log(a==b); //true })();

  1. Se erigió una en el ámbito de ejecución Anonymous .

  2. b se asignará como {} , pero como b no está definido, b se asigna a la window contexto global, entonces se asigna window.b {} ; entonces window.b = {} return s {} .

  3. la variable local a se asigna como {}.

Por lo tanto, aquí suceden algunas cosas interesantes: la local variable a y la global variable b apuntan al mismo objeto {} , por lo que son == y === ; recuerda que {}=={} da false contrario.

Nota: si está en modo estricto:

;(function Anonymous(){ ''use strict'' var a = b = {}; //Uncaught ReferenceError: b is not defined })();

esta asignación consecutiva no funcionará de la misma manera ...


Se evalúa de derecha a izquierda. es decir

document.location.hash = this.slug = this.sliceHashFromHref(href)

significa que la salida / valor de this.sliceHashFromHref(href) se asigna a this.slug y luego a document.location.hash .