tablas - Nombre de la variable como una cadena en Javascript
string to variable javascript (11)
¿Hay alguna forma de obtener un nombre de variable como una cadena en Javascript? (como NSStringFromSelector en Cocoa)
Me gustaría hacer esto:
var myFirstName = ''John'';
alert(variablesName(myFirstName) + ":" + myFirstName);
--> myFirstName:John
-- adicional
Estoy intentando conectar un navegador y otro programa usando JavaScript. Me gustaría enviar nombres de instancia de un navegador a otro programa para el método de devolución de llamada.
FooClass = function(){};
FooClass.someMethod = function(json) {
// Do something
}
instanceA = new FooClass();
instanceB = new FooClass();
doSomethingInAnotherProcess(instanceB); // result will be substituted by using instanceB.someMethod();
....
[De otro programa]
evaluateJavascriptInBrowser("(instanceName).someMethod("resultA");");
En PHP: ¿Cómo obtener un nombre de variable como una cadena en PHP?
Como la respuesta de Seth, pero en su lugar usa Object.keys()
:
const varToString = varObj => Object.keys(varObj)[0]
const someVar = 42
const displayName = varToString({someVar})
Cuando se tiene una función, escribir una función que cambie los diferentes valores de las variables globales, no siempre es mi primer nombre, es lo que sea que esté pasando. Intenta esto funcionó para mí.
Ejecutar en jsfiddle
var jack = ''jill'';
function window_getVarName(what)
{
for (var name in window)
{
if (window[name]==what)
return(name);
}
return("");
}
document.write(window_getVarName(jack));
Escribiré en la ventana ''jack''.
Desde ECMAScript 5.1 , puede usar Object.keys para obtener los nombres de todas las propiedades de un objeto.
Aquí hay un ejemplo:
// Get John’s properties (firstName, lastName)
var john = {firstName: ''John'', lastName: ''Doe''};
var properties = Object.keys(john);
// Show John’s properties
var message = ''John’s properties are: '' + properties.join('', '');
document.write(message);
En ES6, podrías escribir algo como:
let myVar = ''something'';
let nameObject = {myVar};
let getVarNameFromObject = (nameObject) => {
for(let varName in nameObject) {
return varName;
}
}
let varName = getVarNameFromObject(nameObject);
No es realmente lo mejor, pero hace el trabajo bien.
Esto aprovecha la desestructuración de objetos de ES6.
Más información aquí: https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/
Esto funciona para expresiones básicas
const nameof = exp => exp.toString().match(/[.](/w+)/)[1];
Ejemplo
nameof(() => options.displaySize);
Retazo:
var nameof = function (exp) { return exp.toString().match(/[.](/w+)/)[1]; };
var myFirstName = ''Chuck'';
var varname = nameof(function () { return window.myFirstName; });
console.log(varname);
Lo necesitaba, no quería usar objetos, y se me ocurrió la siguiente solución, dando vuelta la pregunta.
En lugar de convertir el nombre de la variable en una cadena, convierto una cadena en una variable.
Esto solo funciona si el nombre de la variable es conocido, por supuesto.
Toma esto:
var height = 120;
testAlert(height);
Esto debería mostrar:
height: 120
Esto se puede hacer así:
function testAlert(ta)
{
a = window[ta];
alert(ta + '': '' + a);
}
var height = 120;
testAlert("height");
// displays: height: 120
Así que utilizo la cadena "height"
y la cambio a una height
variable usando el comando window[]
.
No no hay.
Además, si puede escribir variablesName(myFirstName)
, ya conoce el nombre de la variable ("myFirstName").
Normalmente, utilizaría una tabla hash para una situación en la que desea asignar un nombre a un valor y poder recuperar ambos.
var obj = { myFirstName: ''John'' };
obj.foo = ''Another name'';
for(key in obj)
console.log(key + '': '' + obj[key]);
Puede reflejar los tipos en javascript y obtener el nombre de las propiedades y métodos, pero lo que necesita es algo así como Lambda Expressions Trees
en .NET, creo que no es posible debido a la naturaleza dinámica y la falta de sistema de tipo estático en JavaScript.
var somefancyvariable = "fancy";
keys({somefancyvariable})[0];
esto no se puede convertir en una función ya que devuelve el nombre de la variable de la función
//THIS DOESN''T WORK
function getVarName(v) {
return keys({v})[0];
}
//returns "v"
var x = 2;
for(o in window){
if(window[o] === x){
alert(o);
}
}
Sin embargo, creo que deberías hacer como "karim79"