如何在JavaScript中检索变量的名称

时间:2015-02-23 21:01:26

标签: javascript variables

好吧,让我们说我有各种各样的变种:

tab = document.createOjbect('table');
str = 'asdf';
ary = [123, 456, 789];
obj = {a:123, b:456, c:789};

要对其进行“字符串化”的一段代码:

function Stringify(){
    var con = this.constructor.name;
    if(con == 'String')             return this;
    if(con == 'Arrray')             return this.toString();
    if(con == 'Object')             return JSON.stringify(this);
    if(con == 'HTMLTableElement')   return this.outerHTML;
}

包含变量的数组:

var aVar = [tab, str, ary, obj];

我将数组循环到'stringify'其内容:

for(var i in aVar){
    console.log(
        Stringify.call( aVar[i] );
    );
}

我得到了预期的弦乐对象列表:

<table></table>
asdf
123,456,789
{"a":123,"b":456,"c":789}

但是如果我想在日志中包含变量的名称呢?:

tab: <table></table>
str: asdf
ary: 123,456,789
obj: {"a":123,"b":456,"c":789}

我怎么会这样做?:

for(var i in aVar){
    var id = // get the name of the variable at aVar[i]
    console.log(
        id + ': ',
        Stringify.call( aVar[i] );
    );
}

1 个答案:

答案 0 :(得分:1)

这是不可能的,并没有真正意义。您必须了解函数操纵,而不是变量。

执行此操作时:

var aVar = [tab, str, ary, obj];

数组中放置的是值,而不是变量,尽管它在语法上看起来如此。这些值对引用它们的变量一无所知。

想一想:一个值可以被几个变量引用。获取访问权限的名称是什么意义?在某个早期点引用它的(其中一个)变量的名称?

我担心您的用例的唯一解决方案是在执行流程中携带“变量名称”,或者为每个变量硬编码逻辑。