Ответ 1
Вы правы, это очень невозможно в здравом смысле, поскольку только значение передается в функцию.
У меня такое чувство, что это может быть невозможно, но я бы хотел определить исходное имя переменной, которая была передана функции в javascript. Я не знаю, как объяснить это лучше, чем это, поэтому посмотрите, действительно ли этот пример.
function getVariableName(unknownVariable){
return unknownVariable.originalName;
}
getVariableName(foo); //returns string "foo";
getVariableName(bar); //returns string "bar";
Это для плагина jquery, над которым я работаю, и я хотел бы иметь возможность отображать имя переменной, которая передается функции "debug".
Вы правы, это очень невозможно в здравом смысле, поскольку только значение передается в функцию.
Вот техника, которую вы можете использовать, чтобы сохранить имя и значение переменной.
// Set up a global variable called g
var g = {};
// All other variables should be defined as properties of this global object
g.foo = 'hello';
g.bar = 'world';
// Setup function
function doStuff(str) {
if (str in g) {
var name = str;
var value = g[str];
// Do stuff with the variable name and the variable value here
// For this example, simply print to console
console.log(name, value);
} else {
console.error('Oh snap! That variable does not exist!');
}
}
// Call the function
doStuff('foo'); // log: foo hello
doStuff('bar'); // log: bar world
doStuff('fakeVariable'); // error: Oh snap! That variable does not exist!
Ну, все глобальные переменные являются свойствами глобального объекта (этого или окна), не так ли? Поэтому, когда я хотел узнать имя моих переменных, я сделал следующую функцию:
var getName = function(variable) {
for (var prop in window) {
if (variable === window[prop]) {
return prop;
}
}
}
var helloWorld = "Hello World!";
console.log(getName(helloWorld)); // "helloWorld"
Иногда не работает, например, если 2 строки создаются без нового оператора и имеют одинаковое значение.
Теперь это возможно благодаря ES6:
function getVariableName(unknownVariableInAHash){
return Object.keys(unknownVariableInAHash)[0]
}
const foo = 42
const bar = 'baz'
console.log(getVariableName({foo})) //returns string "foo"
console.log(getVariableName({bar})) //returns string "bar"
Преобразование набора уникальной переменной в один объект JSON, для которого я написал эту функцию
function makeJSON(){ //Pass the variable names as string parameters [not by reference]
ret={};
for(i=0; i<arguments.length; i++){
eval("ret."+arguments[i]+"="+arguments[i]);
}
return ret;
}
Пример:
a=b=c=3;
console.log(makeJSON('a','b','c'));
Возможно, это причина этого запроса