例如,我这里有一个对象
var obj = {a:1,b:2,c:3}
如何获得字符串“obj”的obj'name?
答案 0 :(得分:6)
你做不到。对象可以由任意数量的变量命名,例如
var obj = {a:1,b:2,c:3};
var obj2 = obj;
var otherobj = obj2;
所有这些变量都引用同一个对象 - 它没有特定的名称。
答案 1 :(得分:5)
您无法访问变量的名称。
但是,您可以使用javascript中的functions are first-class objects这一事实,这取决于您的用例。由于每个函数对象都具有设置为函数名称的“name”属性,因此您可以执行以下操作:
var obj = function obj(){ return {a:1,b:2,c:3}; };
console.log("obj.name is: " + obj.name);
> "obj.name is obj"
请注意,我将命名函数分配给obj
而不是更常见的匿名函数 - 因为匿名函数没有名称值。
var obj = function(){ return {a:1,b:2,c:3}; };
console.log("obj.name is: " + obj.name);
> "obj.name is: "
因此,您可以通过这种方式获得一个名称值可以作为字符串访问的对象。但有一点需要注意。如果要访问值,则必须调用该函数:
console.log(obj());
> {a: 1, b: 2, c: 3}
这是因为变量引用了一个函数,而不是该函数引用的返回值:
console.log(obj);
> function obj(){ return {a:1,b:2,c:3}; }
请注意,此技术仍然没有为您提供变量的名称,因为您可以将obj
分配给另一个名为jbo
的变量:
var obj = function obj(){ return {a:1,b:2,c:3}; };
console.log("obj.name is: " + obj.name);
var jbo = obj;
console.log("jbo.name is: " + jbo.name);
> "obj.name is obj"
> "jbo.name is obj"