使用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在其回答中提到的与范围相关的问题。不,对象不是我要找的。是的,这可能是我能找到的最接近的对象。