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


当前回答

我根据JSON创建了这个函数,就像有人建议的那样,它可以很好地满足我的调试需求

function debugVar(varNames){ let strX = ""; function replacer(key, value){ if (value === undefined){return "undef"} return value } for (let arg of arguments){ let lastChar; if (typeof arg!== "string"){ let _arg = JSON.stringify(arg, replacer); _arg = _arg.replace('{',""); _arg = _arg.replace('}',""); _arg = _arg.replace(/:/g,"="); _arg = _arg.replace(/"/g,""); strX+=_arg; }else{ strX+=arg; lastChar = arg[arg.length-1]; } if (arg!==arguments[arguments.length-1]&&lastChar!==":"){strX+=" "}; } console.log(strX) } let a = 42, b = 3, c; debugVar("Begin:",{a,b,c},"end")

其他回答

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

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

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

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

从任何有效的Javascript(变量,类)获取一个字符串:

const nameOf = (f) => (f).toString().replace(/[ |\(\)=>]/g,'');

例子:

nameOf(() => myVariable)             // myVariable
nameOf(() => myVariable.name)        // myVariable.name
nameOf(() => myVariable.name.length) // myVariable.name.length
nameOf(() => myVariable.name[10])    // myVariable.name[10]
nameOf(() => MySuperClass)           // MySuperClass

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

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