使用JavaScript获取变量名称

时间:2012-04-23 06:57:52

标签: javascript

我想创建一个日志函数,我可以插入这样的变量名:

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

log([a, b]);

结果应该在console.log中看起来像这样。

a: 123
b: abc

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

7 个答案:

答案 0 :(得分: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作为范围。除非你能提供范围,否则这是另一个死胡同。


如果将它们作为对象传递,则可以遍历对象及其“键”而不是原始变量名。然而,在这种情况下,这比治疗更具破坏性。

答案 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é