如何知道JavaScript中变量的名称?

如何知道JavaScript中变量的名称?,javascript,Javascript,可能重复: 有没有办法知道变量的名称 例如: var a = 1; var b = 4; function getName(param){ //What should I return here? } 我想做的是让getName如果我调用getName(a)返回“a”,如果我调用getName(b) 这可能吗?不,这不可能以一种干净的方式实现,我非常怀疑是否有一个有用的用例。不,这不可能以一种干净的方式实现,我非常怀疑是否有一个有用的用例。不可能获得变量名。但您可以得到变量的名称,

可能重复:

有没有办法知道变量的名称

例如:

var a = 1;
var b = 4;

function getName(param){
    //What should I return here?
}
我想做的是让
getName
如果我调用
getName(a)
返回“a”,如果我调用
getName(b)


这可能吗?

不,这不可能以一种干净的方式实现,我非常怀疑是否有一个有用的用例。

不,这不可能以一种干净的方式实现,我非常怀疑是否有一个有用的用例。

不可能获得变量名。但您可以得到变量的名称,这个变量恰好得到了这个值(若您得到了一些具有相等值的变量,则首先定义了它)。这个函数只适用于全局变量

var a = 1;
var b = 4;

function test(value) {
  for (var x in window)
    if (window[x] === value)
      return x;
}

alert(test(b));

无法获取变量名。但您可以得到变量的名称,这个变量恰好得到了这个值(若您得到了一些具有相等值的变量,则首先定义了它)。这个函数只适用于全局变量

var a = 1;
var b = 4;

function test(value) {
  for (var x in window)
    if (window[x] === value)
      return x;
}

alert(test(b));

您可以更改对象的原型以添加一个函数来执行此操作,如下所述:


您可以更改对象的原型以添加一个函数来执行此操作,如下所述:



有可能。。。以某种方式我想我一定是糊涂了,但我看不出你引用的答案是怎么回事。对我来说,它似乎给了你一个正式的参数名('x'在链接示例中,'param'在OPs示例中)。是的,这个答案返回了构造函数的名称。有可能。。。以某种方式我想我一定是糊涂了,但我看不出你引用的答案是怎么回事。对我来说,它似乎给了你一个正式的参数名('x'在链接示例中,'param'在OPs示例中)。是的,这个答案返回构造函数的名称。我想你只能通过比较值并返回一个基于该值的字符串来实现这一点。@gdoron-我喜欢这个问题,但正如前面提到的,我会注意它的用法:)所以这里的答案是“sort of”,我想你只能通过比较值并返回一个基于该值的字符串来实现这一点。@gdoron-我喜欢这个问题,但如上所述,我会注意它的用法:)所以这里的答案是“sort of”,如果有两个值相同的变量呢?两个??我有数千个变量可能具有相同的值…正如我所说的,你不能得到变量名,你只能得到变量名,它等于给定的值。如果有两个变量具有相同的值呢?两个??我有数千个可能具有相同值的变量…正如我所说的,你不能得到变量名,只能得到变量名,变量名等于给定值。扩展
对象。原型
是一件坏事。它打破了所有类型的东西,因为脚本通常假设在定义的对象上迭代(例如通过对象文字)不会产生任何函数,除非它们是在该文字中定义的。@ThiefMaster,你是对的,我也不推荐或使用它。我只是对“有没有办法……”这个问题提供了一个答案:
var blah='moo';(函数(lol){print(lol.getName();})(blah)=>
字符串
。我认为OP想要的是变量名,而不是构造函数名。尽管他确实接受了答案……扩展
Object.prototype
是件坏事。它打破了所有类型的东西,因为脚本通常假设在定义的对象上迭代(例如通过对象文字)不会产生任何函数,除非它们是在该文字中定义的。@ThiefMaster,你是对的,我也不推荐或使用它。我只是对“有没有办法……”这个问题提供了一个答案:
var blah='moo';(函数(lol){print(lol.getName();})(blah)=>
字符串
。我认为OP想要的是变量名,而不是构造函数名。即使他接受了答案。。。