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


当前回答

对于那些想打印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 ) 结果:

其他回答

我迄今为止发现的获取变量名为字符串的最短方法:

Object.keys(obj)[0]; const whatsMyName = "Snoop Doggy Dogg"; console.log("变量名是:" + name({whatsMyName})); //结果:变量名是:whatsMyName

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}); 编辑:对象。在我测试的每个浏览器中,键都可以作为键引用,但根据评论,它并不适用于所有地方。

在ES6中,你可以这样写:

让 myVar = '某物'; let nameObject = {myVar}; let getVarNameFromObject = (nameObject) => { for(let varName in nameObject) { 返回变量名称; } } let varName = getVarNameFromObject(nameObject); console.log(varName);

虽然不是最好看的,但它能完成任务。

这利用了ES6的对象解构。

更多信息请访问:https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/

如果你正在寻找一些快速而肮脏的东西,这可能会奏效:

var zox = 150;

cl("zox");

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

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

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