如何使用JS将对象的名称转换为字符串形式?

nic*_*ice 3 javascript object

例如,我在这里有一个对象

var obj = {a:1,b:2,c:3}
Run Code Online (Sandbox Code Playgroud)

我怎么能得到一个字符串"obj"的obj'name?

Bar*_*mar 6

你不能.对象可以由任意数量的变量命名,例如

var obj = {a:1,b:2,c:3};
var obj2 = obj;
var otherobj = obj2;
Run Code Online (Sandbox Code Playgroud)

所有这些变量都引用相同的对象 - 它没有特定的名称.


Ric*_* II 5

您无法访问变量的名称.

但是,根据您的用例,您可以使用函数是 javascript 中的第一类对象这一事实.由于每个函数对象都具有设置为函数名称的"name"属性,因此您可以:

var obj = function obj(){ return {a:1,b:2,c:3}; };
console.log("obj.name is: " + obj.name);

> "obj.name is obj"
Run Code Online (Sandbox Code Playgroud)

请注意,我分配了一个命名函数obj而不是更常见的匿名函数 - 因为匿名函数没有名称值.

var obj = function(){ return {a:1,b:2,c:3}; };
console.log("obj.name is: " + obj.name); 

> "obj.name is: "
Run Code Online (Sandbox Code Playgroud)

因此,通过这种方式,您可以使用名称值作为字符串访问的对象.但有一点需要注意.如果要访问该,则必须调用该函数:

console.log(obj());

> {a: 1, b: 2, c: 3}
Run Code Online (Sandbox Code Playgroud)

这是因为变量引用了一个函数,而不是函数返回的值:

console.log(obj);

> function obj(){ return {a:1,b:2,c:3}; }
Run Code Online (Sandbox Code Playgroud)

请注意,此技术仍然不会为您提供变量的名称,因为您可以分配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"
Run Code Online (Sandbox Code Playgroud)