variable tag simo sheet manager guide gtm google espaƱol cheat ahava javascript

simo - javascript variable google tag manager



Javascript: referencia un nombre de variable de la propia variable (6)

Solución - (para su caso de uso real) - console.log({foo})

En ES6 IdentifierReference s se aceptan como PropertyDefinition s en la ObjectLiteral de ObjectLiteral ( ver tabla de compatibilidad ):

El nombre de la variable se establece en la key Property del Object .
y el valor de la variable se establece en el value Property del Object .

Como console.log muestra los Object con sus key y value Propertiy , puede usarlos para ver el nombre y el valor de su variable invocando console.log({foo}) .

Tenga en cuenta que cuando inicializa un único object anónimo con varias variables, como hice en el segundo console.log mientras aparecen en el mismo orden en que se inicializaron aquí en la salida del fragmento, se pueden reordenar (alfabéticamente) en otro lugar.

var testint = 3 var teststring = "hi" var testarr = ["one", 2, (function three(){})] var testobj = {4:"four", 5:"five", nested:{6:"six",7:"seven"}} console.log({testint}) console.log({testint, teststring, testarr, testobj})

Respuesta - (al título de la pregunta) - Object.keys({foo})[0]

También puede usar este Object Initializer abreviado junto con Object.keys() para acceder directamente al nombre de la variable:

var name = "value" console.log(Object.keys({name})[0])

Quiero crear una función rápida que console.log un nombre de variable y el valor. Me gustaría que el resultado de la función se muestre en la consola: foo: bar .

Mi idea básica para la función se ve así:

function varlog(var_name) { console.log(var_name + ": " + eval(var_name)); }

Y llamaría así es:

function someRandomFunction() { var foo = "bar"; // ... some stuff happens varlog("foo"); }

Esto funciona si foo es global, pero no funciona en el ejemplo proporcionado. Otra opción que también solo funciona globalmente es usar window[var_name] lugar de la eval miedo.

No creo que lo que pido sea posible, pero pensé que lo tiraría por ahí.

Estoy gastando mucho tiempo intentando ser perezoso. Mi método actual es solo console.log(''foo: '' + bar); que funciona bien Pero ahora solo quiero saber si esto es posible.

Algunas otras preguntas a las que hice referencia en la búsqueda de esto / creando lo que tengo ahora:

-

Edición: Me encantaría llamar a varlog(foo) , si el nombre "foo" se puede derivar de la variable.


Aunque no estoy al tanto de tal posibilidad, quería compartir una pequeña idea:

Object.prototype.log = function(with_message) { console.log(with_message + ":" + this); } var x = "string"; x.log("x");

Como he dicho, una pequeña idea.


La razón por la que no funciona es porque la variable foo no es accesible a la función varlog ! foo se declara en someRandomFunction, y nunca se pasa a varlog , por lo que varlog no tiene idea de cuál es la variable foo! Puede resolver este problema pasando la variable foo a la función (o utilizando algún tipo de cierre para hacer que foo esté en el ámbito de varlog ) junto con su representación de cadena, pero de lo contrario, creo que no tiene suerte.

Espero que esto ayude.


Me encantó la idea de @mhitza, así que la estoy haciendo un poco más grande ...

El inconveniente es la necesidad de utilizar .value para alcanzar el contenido variable.

Object.prototype.log = function(message) { if (message) console.log(this.name, this.value, message); else console.log(this.name, this.value); } function nar (name, value) { var o = {name: name, value: value}; this[name] = o; return o; } // var globalVar = 1; nar(''globalVar'', 1); globalVar.log(); // > globalVar 1 globalVar.value += 5; globalVar.log(''equal six''); // > globalVar 6 equal six var someFunction = function () { // var localVar = 2; nar(''localVar'', 2); localVar.log(''someInfo''); // > localVar 2 someInfo }; someFunction();


No creo que lo que quieres hacer sea posible.

La mejor alternativa que se me ocurre es pasar un objeto a varlog que es básicamente un hash de clave-valor:

function varlog(obj) { for (var varname in obj) { console.log(varname + ": " + obj[varname]); } } function someRandomFunction() { var foo = "bar"; // ... some stuff happens varlog({foo: foo}); }


Tipo de combinación de un par de respuestas en una pequeña función.

Que este trabajo para usted?

const log = function() { const key = Object.keys(this)[0]; const value = this[key]; console.log(`${key}: ${value}`); } let someValue = 2; log.call({someVlaue}); //someValue: 2

Funciona con la función también, incluso a sí mismo.

log.call({log}); // It would return the following log:function() { const key = Object.keys(this)[0]; const value = this[key]; console.log(`${key}: ${value}`); }