Имя переменной в виде строки в Javascript - PullRequest
120 голосов
/ 05 января 2011

Есть ли способ получить имя переменной в виде строки в Javascript?(как NSStringFromSelector в Какао )

Я хотел бы сделать так:

var myFirstName = 'John';
alert(variablesName(myFirstName) + ":" + myFirstName);

--> myFirstName:John

ОБНОВЛЕНИЕ

Я пытаюсь подключить браузер и другую программу, используя JavaScript.Я хотел бы отправить имена экземпляров из браузера в другую программу для метода обратного вызова:

FooClass = function(){};
FooClass.someMethod = function(json) {
  // Do something
}

instanceA = new FooClass();
instanceB = new FooClass();
doSomethingInAnotherProcess(instanceB); // result will be substituted by using instanceB.someMethod();

...

Из другой программы:

evaluateJavascriptInBrowser("(instanceName).someMethod("resultA");");

В PHP: Как получить переменнуюимя как строка в PHP?

Ответы [ 14 ]

50 голосов
/ 14 марта 2017

Как и ответ Сета, но вместо него используется Object.keys():

const varToString = varObj => Object.keys(varObj)[0]

const someVar = 42
const displayName = varToString({ someVar })
console.log(displayName)
47 голосов
/ 05 января 2011

Как правило, вы используете хеш-таблицу для ситуации, когда вы хотите сопоставить имя некоторому значению и иметь возможность получить оба.

var obj = { myFirstName: 'John' };
obj.foo = 'Another name';
for(key in obj)
    console.log(key + ': ' + obj[key]);
30 голосов
/ 23 сентября 2016

В ES6 вы могли бы написать что-то вроде:

let myVar = 'something';
let nameObject = {myVar};
let getVarNameFromObject = (nameObject) => {
  for(let varName in nameObject) {
    return varName;
  }
}
let varName = getVarNameFromObject(nameObject);

Не самая лучшая вещь, но она выполняет свою работу.

Это усиливает разрушение объектов ES6.

Подробнее здесь: https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/

24 голосов
/ 01 октября 2018

Вы можете использовать следующее решение для решения вашей проблемы:

const myFirstName = 'John'
Object.keys({myFirstName})[0]

// returns "myFirstName"
18 голосов
/ 05 января 2011
var x = 2;
for(o in window){ 
   if(window[o] === x){
      alert(o);
   }
}

Тем не менее, я думаю, что вы должны сделать как "karim79"

13 голосов
/ 14 мая 2016

Это работает для основных выражений

const nameof = exp => exp.toString().match(/[.](\w+)/)[1];

Пример

nameof(() => options.displaySize);

Фрагмент:

var nameof = function (exp) { return exp.toString().match(/[.](\w+)/)[1]; };
var myFirstName = 'Chuck';
var varname = nameof(function () { return window.myFirstName; });
console.log(varname);
8 голосов
/ 24 января 2019

Вероятно, для обеспечения безопасности pop лучше, чем индексирование с помощью [0] (переменная может быть нулевой).

const myFirstName = 'John'
const variableName = Object.keys({myFirstName}).pop();
console.log(`Variable ${variableName} with value '${variable}'`);

// returns "Variable myFirstName with value 'John'"
6 голосов
/ 05 октября 2017
var somefancyvariable = "fancy";
keys({somefancyvariable})[0];

это нельзя сделать функцией, так как она возвращает имя переменной функции

//THIS DOESN'T WORK
function getVarName(v) {
    return keys({v})[0];
}
//returns "v"
6 голосов
/ 18 июня 2015

Начиная с ECMAScript 5.1 , вы можете использовать Object.keys , чтобы получить имена всех свойств объекта.

Вот пример:

// 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);
3 голосов
/ 18 июня 2014

Когда есть функция, пишите функцию, которая изменяет различные значения глобальных переменных, это не всегда myfirstname, это то, что происходит через.Попробуйте, это сработало для меня.

Запустите 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));

Запишет в окно 'jack'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...