9

我想创建一个日志函数,我可以在其中插入如下变量名:

var a = '123',
    b = 'abc';

log([a, b]);

结果在 console.log 中应该是这样的

a: 123
b: abc

获取变量的值是没有问题的,但是如何获取变量名呢?该函数应该是通用的,所以我不能总是假设范围是窗口。

4

7 回答 7

6

所以参数是一个变量数组?那么不,一旦以这种方式传递,就无法获得原始变量名。在接收端,它们看起来像:

["123","abc"];

仅此而已


您可以为函数提供变量的名称和它们所在的范围,例如:

function log(arr,scope){
    for(var i=0;i<arr.length;i++){
        console.log(arr[i]+':'scope[arr[i]]);
    }
}

但是,如果您也可以给出范围,这就会遇到问题。this某些代码领域存在很多问题:

  • 对于非严格函数,thiswindow
  • 对于严格的函数,thisundefined
  • 对于构造函数,this是构造的对象
  • 在对象字面量中,this是直接封闭对象

所以你不能依赖传递this作为一个范围。除非你能提供范围,否则这是另一个死胡同。


如果您将它们作为对象传递,那么您可以遍历对象及其“键”而不是原始变量名。然而,在这种情况下,这弊大于利。

于 2012-04-23T07:14:38.867 回答
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 所说,从被调用函数内部查看变量名称不是一种选择。

于 2012-04-23T07:28:16.190 回答
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();
于 2012-04-23T07:07:31.560 回答
0

不知道这是否真的可以在 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);       
  }

然后你可以通过这个对象循环,你可以得到名称和值

于 2012-04-23T07:02:44.543 回答
0

您无法使用数组访问变量名称。您可以做的是使用对象或将变量名称作为字符串传递:

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"]);
于 2012-04-23T07:04:51.890 回答
0

我有一个有点类似的问题,但出于不同的原因。

我能找到的最佳解决方案是:

MyArray = ["zero","one","two","three","four","five"]; 
MyArray.name="MyArray";

因此,如果:

x=MyArray.name;

然后:

X=="MyArray"

就像我说的,它适合我的需要,但不确定这对你有什么用。我觉得我什至需要它很傻,但我确实需要它。

于 2016-02-08T07:48:18.793 回答
-2

测试这个。

var variableA="valor01"; <br>
var variableB="valor02";

var NamevariableA=eval('("variableA")');<br>
var NamevariableB=eval('("variableB")');<br>

console.log(NamevariableA,NamevariableB);

爱特。曼努埃尔·雷塔莫佐·阿鲁埃

于 2014-04-07T17:24:13.890 回答