有一种方法来获得一个变量名作为字符串在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中获得变量名作为字符串?
我需要这个,不想使用对象,然后想出了下面的解决方案,把问题转过来。
我没有将变量名转换为字符串,而是将字符串转换为变量。
当然,这只在变量名已知的情况下才有效。
用这个:
var height = 120;
testAlert(height);
这应该显示:
height: 120
可以这样做:
function testAlert(ta)
{
a = window[ta];
alert(ta + ': ' + a);
}
var height = 120;
testAlert("height");
// displays: height: 120
所以我使用字符串“height”,并使用window[]命令将其转换为可变高度。
我根据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")
对于那些想打印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 )
结果: