我想创建一个日志函数,我可以在其中插入如下变量名:
var a = '123',
b = 'abc';
log([a, b]);
结果在 console.log 中应该是这样的
a: 123
b: abc
获取变量的值是没有问题的,但是如何获取变量名呢?该函数应该是通用的,所以我不能总是假设范围是窗口。
我想创建一个日志函数,我可以在其中插入如下变量名:
var a = '123',
b = 'abc';
log([a, b]);
结果在 console.log 中应该是这样的
a: 123
b: abc
获取变量的值是没有问题的,但是如何获取变量名呢?该函数应该是通用的,所以我不能总是假设范围是窗口。
所以参数是一个变量数组?那么不,一旦以这种方式传递,就无法获得原始变量名。在接收端,它们看起来像:
["123","abc"];
仅此而已
您可以为函数提供变量的名称和它们所在的范围,例如:
function log(arr,scope){
for(var i=0;i<arr.length;i++){
console.log(arr[i]+':'scope[arr[i]]);
}
}
但是,如果您也可以给出范围,这就会遇到问题。this
某些代码领域存在很多问题:
this
是window
this
是undefined
this
是构造的对象this
是直接封闭对象所以你不能依赖传递this
作为一个范围。除非你能提供范围,否则这是另一个死胡同。
如果您将它们作为对象传递,那么您可以遍历对象及其“键”而不是原始变量名。然而,在这种情况下,这弊大于利。
我知道你想节省一些击键。我也是。但是,我通常像这里的其他人已经建议的那样记录变量名称和值。
console.log({a:a, b: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 所说,从被调用函数内部查看变量名称不是一种选择。
像这样的东西会做你正在寻找的东西:
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();
不知道这是否真的可以在 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"]);
我有一个有点类似的问题,但出于不同的原因。
我能找到的最佳解决方案是:
MyArray = ["zero","one","two","three","four","five"];
MyArray.name="MyArray";
因此,如果:
x=MyArray.name;
然后:
X=="MyArray"
就像我说的,它适合我的需要,但不确定这对你有什么用。我觉得我什至需要它很傻,但我确实需要它。
测试这个。
var variableA="valor01"; <br>
var variableB="valor02";
var NamevariableA=eval('("variableA")');<br>
var NamevariableB=eval('("variableB")');<br>
console.log(NamevariableA,NamevariableB);
爱特。曼努埃尔·雷塔莫佐·阿鲁埃