有一种方法来获得一个变量名作为字符串在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")
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});
编辑:对象。在我测试的每个浏览器中,键都可以作为键引用,但根据评论,它并不适用于所有地方。
使用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]