如何将字符串转换为对象属性?

How to convert string into object property?

我有一个 json 数据,其中包含这样的未知对象:

var x = {
  "unknown1": 234,
  "unknown2": 324
}

我可以获得如下属性名称:

var prop1 = Object.keys(x)[0];  

现在我想求这个属性的值。我显然可以做到 x[prop1],但我想做到 x.prop1。我的问题是:

What are ways to convert prop1 into an expression so that I could use x.prop1?

如果不生成源代码和 compiling/evaluating 就不能。

If eval can solve this then how and why would eval create security problems in this case?

是的,eval(及其近亲 new Function)可以做到这一点。如果您 evaling 的内容来自不受信任的来源,这只是一个安全问题。如果您可以相信 prop1 的值不包含恶意内容,那么您可以使用 eval("x." + prop1) 来执行此操作。或者 new Function("x", "return x." + prop1)(x).

但是没有充分的理由。只需使用 x[prop1]。这就是括号符号的用途。这是正常做法,它不需要启动解析器和代码生成器,速度更快,而且您不必担心 prop1 中有恶意代码。如果你使用 evalnew Function,那是 不是 的正常做法,它必须启动解析器和代码生成器,速度较慢,而且你有那个小问题在你的脑海里。所以使用x[prop1]。 :-)

正如@mhodges 在他的评论中所说,您可以添加一个新的 属性。

但这样做似乎是多余的。

x.prop1 = x[Object.keys(x)[0]]