有一种方法来获得一个变量名作为字符串在Javascript?(类似于Cocoa中的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中获得变量名作为字符串?


当前回答

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] + "\"");
}

您需要使用包含该变量的单个元素数组调用该函数。debugVar ({somefancyvariable}); 编辑:对象。在我测试的每个浏览器中,键都可以作为键引用,但根据评论,它并不适用于所有地方。

其他回答

当让一个函数写一个改变不同全局变量值的函数时,它并不总是我的名字,它是碰巧经过的任何东西。试试这个对我有用。

在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'。

出于安全考虑(变量可能为空),可能pop会比[0]索引更好。

const myFirstName = 'John' const variableName = Object.keys({myFirstName}).pop(); console.log('变量${variableName},值'${myFirstName}'); //返回变量myFirstName值为John

var x = 2;
for(o in window){ 
   if(window[o] === x){
      alert(o);
   }
}

但是,我认为你应该像"karim79"

像Seth的答案,但使用Object.keys()代替:

const varToString = varObj => Object.keys(varObj)[0] const someVar = 42 const displayName = varToString({ someVar }) 控制台.log(显示名称)

你可以在javascript中反映类型,并获得属性和方法的名称,但你需要的是。net中的Lambda表达式树,我认为这是不可能的,因为javascript中缺乏动态的类型系统。