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


当前回答

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

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

其他回答

不,没有。 此外,如果你能写变量名(myFirstName),你已经知道变量名(“myFirstName”)。

这适用于基本表达式

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);

对于那些想打印variableName和variableValue用于调试的人,这里有一个函数:

const printNameValue = (v)=> {
  var varName = (v).toString().replace(/[ |\(\)=>]/g, '')
  var varValue = (v)()
  // neat : console.log(varName,varValue);
  // with some coloring  : 
  console.log("\033[1;96m[\033[1;33m " + varName + " :\033[0;0m " + varValue+"\033[1;96m ]\033[0;0m");
}

例子:

const myNiceVariable = 1234 叫: printNameValue(()=> myNiceVariable ) 结果:

通常,当您希望将名称映射到某个值,并且能够检索两者时,您将使用哈希表。

var obj ={我的名字:'john'}; obj。foo = '另一个名称'; 用于(输入obj) console.log(key+':'+obj[key]);

从ECMAScript 5.1开始,你可以使用Object。键从对象中获取所有属性的名称。

这里有一个例子:

//获取John的属性(firstName, lastName) var john = {firstName: ' john ', lastName: 'Doe'}; var属性= Object.keys(john); //显示John的属性 var message = 'John的属性是:' +属性。加入(" "); document . write(消息);