使用JavaScript获取变量名称

arp*_*rpo 9 javascript

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

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

log([a, b]);
Run Code Online (Sandbox Code Playgroud)

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

a: 123
b: abc
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*eph 6

所以参数是变量数组?那么没有,一旦通过这种方式就没有办法得到原始的变量名.在接收端,它们看起来像:

["123","abc"];
Run Code Online (Sandbox Code Playgroud)

仅此而已


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

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

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

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

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


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