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


当前回答

使用Object.keys()的最佳方式;

示例:在全局作用域中获取多个变量名

//多个变量进行测试 Var x = 5, b = true, m = 6, v = "str"; //在object中传递你想要的所有变量 函数getVarsNames(v = {}){ //获取钥匙或名字! let names = Object.keys(v); //返回数组包含所有变量名 返回名称; } //测试是否工作 let VarsNames = getVarsNames({x, b, m, v}); console.log (VarsNames);//输出数组[x, b, m, v]

其他回答

您可以使用以下解决方案来解决您的问题:

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

// returns "myFirstName"

这适用于Internet Explorer(9,10和11),谷歌Chrome 5:

var myFirstName = “Danilo”; var varName = Object.keys({myFirstName:0})[0]; console.log(varName);

浏览器兼容性表: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

对于那些想打印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 zox = 150;

cl("zox");

function cl(c) {
    console.log(c + ': ' + this[c]); // zox: 150    
}

使用Object.keys()的最佳方式;

示例:在全局作用域中获取多个变量名

//多个变量进行测试 Var x = 5, b = true, m = 6, v = "str"; //在object中传递你想要的所有变量 函数getVarsNames(v = {}){ //获取钥匙或名字! let names = Object.keys(v); //返回数组包含所有变量名 返回名称; } //测试是否工作 let VarsNames = getVarsNames({x, b, m, v}); console.log (VarsNames);//输出数组[x, b, m, v]