获取变量的名称(如C#中的nameof运算符)

dr.*_*rAI 11 javascript nameof

我们假设我们有以下代码:

const myVariable = { age: 7, name: "Hunter" };
Run Code Online (Sandbox Code Playgroud)

我想知道变量的名称,而不仅仅是它的值,并将其放在一个字符串中或记录它或:

const s = nameof(myVariable) + ': ' + JSON.stringify(myVariable);
Run Code Online (Sandbox Code Playgroud)

我希望看到的结果是:

"myVariable: {"age":7,"name":"Hunter"}"
Run Code Online (Sandbox Code Playgroud)

期待看到您的解决方案.

dr.*_*rAI 6

这是我自己的问与答风格,有些妥协。这里的技巧是通过将参数用大括号括起来(nameof({myVariable})而不是)将参数传递给对象内部的函数nameof nameof(myVariable)

遵循此约定,解决方案如下所示:

var HD = HD || {};
HD.nameof = function (obj) {
  return Object.keys(obj)[0];
}
Run Code Online (Sandbox Code Playgroud)

这就是我使用它来获取变量/对象的名称以及对象的内容/变量的值的方式:

const s = HD.nameof({myVariable}) + ': ' + JSON.stringify(myVariable);   
Run Code Online (Sandbox Code Playgroud)

因此,s将包含上述问题中要求的结果。

  • 对于人眼来说,“ myVariable”和“ {myVariable}”之间的区别似乎并不大,但是某些智能感知算法或解析器可以发现这种区别很有用。我认为这就是为什么将它引入C#6([C#中的nameof](https://msdn.microsoft.com/zh-cn/library/dn986596.aspx))的原因。我喜欢它,并在我的C#代码中经常使用它,而这种折衷几乎使ES中的nameof运算符成为可能。 (6认同)
  • 真的太糟糕了,这对于`foo.myVariable`来说并不容易 (5认同)
  • @Liam:不,诀窍在于花括号和 [ES6 的属性速记功能](http://es6-features.org/#PropertyShorthand)。基本上,他在做`HD.nameof({myVariable: myVariable})`,即`Object.keys({myVariable: myVariable})[0]`,当然是`"myVariable"`。 (2认同)