使用JavaScript获取变量名
我想创建一个日志函数,在其中可以插入如下变量名:使用JavaScript获取变量名,javascript,Javascript,我想创建一个日志函数,在其中可以插入如下变量名: var a = '123', b = 'abc'; log([a, b]); function log(o) { var key; for (key in o) { console.log(key + ":", o[key]); } } var a = '1243'; var b = 'qwre'; log({ a:a, b:b }); 结果在console.log中应该是这
var a = '123',
b = 'abc';
log([a, b]);
function log(o) {
var key;
for (key in o) {
console.log(key + ":", o[key]);
}
}
var a = '1243';
var b = 'qwre';
log({
a:a,
b:b
});
结果在console.log中应该是这样的
a: 123
b: abc
获取变量的值没有问题,但是如何获取变量名呢?这个函数应该是泛型的,所以我不能总是假设作用域是窗口 不知道这在JS中是否真的有效。。。但您可以使用对象,在其中可以存储名称和值:
function MyLogObject(name, value) {
this.name = name;
this.value = value;
}
var log = [];
log.push(new MyLogObject('a', '123'));
log.push(new MyLogObject('b', 'abc'));
for each (var item in log) {
if (item.value != undefined)
alert(item.name + "/" + item.value);
}
然后你可以循环通过这个对象,你可以得到名称和值。你不能使用数组访问变量名。您可以使用对象或将变量名作为字符串传递:
var x = 7;
var y = 8;
function logVars(arr){
for(var i = 0; i < arr.length; i++){
alert(arr[i] + " = " + window[arr[i]]);
}
}
logVars(["x","y"]);
var x=7;
变量y=8;
函数logVars(arr){
对于(变量i=0;i
像这样的东西可以满足您的需求:
function log(logDict) {
for (var item in logDict) {
console.log(item + ": " + logDict[item]);
}
}
function logSomeStuff() {
var dict = {};
dict.a = "123";
dict.b = "abc";
log(dict);
}
logSomeStuff();
那么参数是一个变量数组?那么不,一旦以这种方式传递,就无法获得原始变量名。在接收端,它们看起来就像:
["123","abc"];
没别的了
您可以向函数提供变量的名称及其作用域,如:
function log(arr,scope){
for(var i=0;i<arr.length;i++){
console.log(arr[i]+':'scope[arr[i]]);
}
}
功能日志(arr,范围){
对于(var i=0;i我知道您想保存一些击键。我也是。但是,我通常会记录变量名和值,就像这里其他人已经建议的那样
console.log({a:a, b:b});
如果您确实喜欢已经演示过的格式,那么您可以这样做:
var a = '123',
b = 'abc';
log([a, b]);
function log(o) {
var key;
for (key in o) {
console.log(key + ":", o[key]);
}
}
var a = '1243';
var b = 'qwre';
log({
a:a,
b:b
});
无论哪种方式,如果您想查看,您都需要在日志记录请求中包含变量名。正如Gareth所说,从被调用函数内部查看变量名不是一个选项。测试这一点
var variableA="valor01"; <br>
var variableB="valor02";
var NamevariableA=eval('("variableA")');<br>
var NamevariableB=eval('("variableB")');<br>
console.log(NamevariableA,NamevariableB);
var variableA=“valor01”
var variableB=“valor02”;
变量名称variableA=eval(“(“variableA”);
var NamevariableB=eval(“(“variableB”);
log(NamevariableA,NamevariableB);
阿泰。
曼努埃尔·雷塔莫佐·阿鲁(Manuel Retamozo Arrué)我也有类似的问题,但原因不同
我能找到的最佳解决方案是:
MyArray = ["zero","one","two","three","four","five"];
MyArray.name="MyArray";
因此,如果:
x=MyArray.name;
然后:
正如我所说,它适合我的需要,但不确定这将如何为你工作。
我觉得自己甚至需要它都很傻,但我确实需要它。“该函数应该是通用的,所以我不能总是假设作用域是窗口。”OP说。我知道数组和and对象可以工作。但我想保存键击,请参见上面的答案。我不能假设作用域是window。事实上,我尽可能少地使用window作用域。这在Javascript中是不可能的,因为您希望它工作。使用类似var foo=bar={}
同一个对象由两个名称引用,如果您只是将该对象传递到函数中,则不可能从函数内部反转该查找并查看用于传递该对象的名称。好的,那么我可以停止搜索。Thanx!相反,您应该学习如何使用调试器。首先放置一行仅包含调试器而不是调试器您的console.log行,然后使用Firebug或Chrome Inspector openExact duplicate of I Know I can use a object运行代码。我要做的是在工作时保存按键。我想快速查看一组变量是什么。如果必须将它们放入对象,我会得到另一种类型的按键:)我已经厌倦了键入console.log('a:'+a'b:'+b');并且想要一个函数来处理这个问题。在这种情况下,您会遇到@Joseph在其回答中提到的与范围相关的问题。不,对象不是我要找的。是的,这可能是我能找到的最接近的对象。