Имя переменной как строка в Javascript
Есть ли способ получить имя переменной в виде строки в Javascript? (например, NSStringFromSelector
в Cocoa)
Я хотел бы сделать так:
var myFirstName = 'John';
alert(variablesName(myFirstName) + ":" + myFirstName);
--> myFirstName:John
UPDATE
Я пытаюсь подключить браузер и другую программу, используя 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?
Ответы
Ответ 1
Как правило, вы должны использовать хеш-таблицу для ситуации, когда вы хотите сопоставить имя с некоторым значением и сможете получить оба.
var obj = { myFirstName: 'John' };
obj.foo = 'Another name';
for(key in obj)
console.log(key + ': ' + obj[key]);
Ответ 2
Подобно ответу Сета, но вместо этого используется Object.keys()
:
const varToString = varObj => Object.keys(varObj)[0]
const someVar = 42
const displayName = varToString({ someVar })
console.log(displayName)
Ответ 3
В 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/
Ответ 4
Вы можете использовать следующее решение для решения вашей проблемы:
const myFirstName = 'John'
Object.keys({myFirstName})[0]
// returns "myFirstName"
Ответ 5
var x = 2;
for(o in window){
if(window[o] === x){
alert(o);
}
}
Однако, я думаю, вы должны сделать, как "karim79"
Ответ 6
Это работает для основных выражений
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);
Ответ 7
Возможно, pop будет лучше, чем индексирование с помощью [0], для безопасности (переменная может быть нулевой).
const myFirstName = 'John'
const variableName = Object.keys({myFirstName}).pop();
console.log('Variable ${variableName} with value '${variable}'');
// returns "Variable myFirstName with value 'John'"
Ответ 8
var somefancyvariable = "fancy";
Object.keys({somefancyvariable})[0];
Это нельзя сделать функцией, так как она возвращает имя переменной функции.
// THIS DOESN'T WORK
function getVarName(v) {
return Object.keys({v})[0];
}
// Returns "v"
Изменение: Спасибо @Madeo за указание, как превратить это в функцию.
function debugVar(varObj) {
var varName = Object.keys(varObj)[0];
console.log("Var \"" + varName + "\" has a value of \"" + varObj[varName] + "\"");
}
Редактировать: на Object.keys
можно ссылаться как на keys
в каждом браузере, в котором я его тестировал, но, согласно комментариям, он работает не везде.
Ответ 9
Поскольку 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);
Ответ 10
Когда есть функция, пишите функцию, которая изменяет различные значения глобальных переменных, это не всегда 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));
Пишет в окошко "домкрат".
Ответ 11
Мне это нужно, не нужно использовать объекты, и придумал следующее решение, обратив вопрос.
Вместо преобразования имени переменной в строку, я конвертирую строку в переменную.
Это работает, только если имя переменной известно.
Возьмите это:
var height = 120;
testAlert(height);
Это должно отображаться:
height: 120
Это можно сделать следующим образом:
function testAlert(ta)
{
a = window[ta];
alert(ta + ': ' + a);
}
var height = 120;
testAlert("height");
// displays: height: 120
Поэтому я использую строку "height"
и превращаю ее в переменную height
с помощью команды window[]
.
Ответ 12
Вы можете отражать типы javascript и получать имя свойств и методов, но то, что вам нужно, это sth как Lambda Expressions Trees
в .NET, я думаю, что это невозможно из-за динамического характера и отсутствия системы статического типа в javascript.
Ответ 13
Это работало с использованием Internet Explorer (9, 10 и 11), Google Chrome 5:
var myFirstName = "Danilo";
var varName = Object.keys({myFirstName:0})[0];
console.log(varName);
Ответ 14
Нет, нет.
Кроме того, если вы можете написать variablesName(myFirstName)
, вы уже знаете имя переменной ( "myFirstName" ).