我想创建一个日志函数,我可以插入这样的变量名:
var a = '123',
b = 'abc';
log([a, b]);
结果应该在console.log中看起来像这样。
a: 123
b: abc
获取变量的值没有问题,但如何获取变量名称?该函数应该是通用的,所以我不能总是假设范围是窗口。
答案 0 :(得分:6)
所以参数是一个变量数组?那么没有,一旦通过这种方式就没有办法得到原始的变量名。在接收端,它们看起来像:
["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
作为范围。除非你能提供范围,否则这是另一个死胡同。
如果将它们作为对象传递,则可以遍历对象及其“键”而不是原始变量名。然而,在这种情况下,这比治疗更具破坏性。
答案 1 :(得分:2)
我知道你想保存一些按键。我也是。但是,我通常记录变量名称和值,就像其他人已经建议的那样。
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说的那样,看到被调用函数内部的变量名不是一种选择。
答案 2 :(得分:1)
这样的事情可以满足您的需求:
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();
答案 3 :(得分:0)
不知道这是否真的可以在JS中运行...但你可以使用一个Object,你可以在其中存储名称和值:
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);
}
然后你可以通过这个对象循环,你可以得到名称和值
答案 4 :(得分:0)
您无法使用Array访问变量名称。你可以做的是使用对象或将变量名称作为字符串传递:
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"]);
答案 5 :(得分:0)
我有一个类似的问题,但出于不同的原因。
我能找到的最佳解决方案是:
MyArray = ["zero","one","two","three","four","five"];
MyArray.name="MyArray";
所以如果:
x=MyArray.name;
然后:
X=="MyArray"
就像我说的,它符合我的需要,但不确定这对你有用。 我觉得我甚至需要它很傻,但我做到了。
答案 6 :(得分:-2)
测试一下。
var variableA="valor01"; <br>
var variableB="valor02";
var NamevariableA=eval('("variableA")');<br>
var NamevariableB=eval('("variableB")');<br>
console.log(NamevariableA,NamevariableB);
ATTE。 ManuelRetamozoArrué