无法使用带点的计算 属性 值 - 无法设置为字符串 - JS

Unable to use Computed Property Values with Dots - Unable to Set as String - JS

示例代码:https://playcode.io/757707/

看看它向控制台记录了什么。 我不确定是否有办法计算 属性 值,名称中有点,作为有效的 JSON.

打印的对象中的第三个字段始终是:

{
    dot.notation: "value"
}

为了使其有效 JSON 如果您想要一个点“.”,您需要在 属性 名称周围加上引号。在 属性 名称中。

例如有效的 JSON 看起来像这样:

{
  "dot.notation": "value"
}

在 属性 名称中使用点似乎是一种不好的做法...但应该有一种方法可以将 属性 显式设置为字符串,因此 JSON如果我计算 属性 名称,则无效。由于此解析 JSON 对象的 JSON 字符串不起作用。

有谁知道在引号中显式设置 属性 名称的解决方法?

我很乐意遵循最佳做法,而不是在 属性 名称中使用点,但这对于 Looker 中的某些请求是必需的。我在 Looker 为客户工作,所以我需要一个解决方法。

严格来说 JSON 格式,所有字段名称都必须用引号引起来。这是互操作性所必需的,例如将数据发送到 REST API 等。在这些引号内,根据 JSON 规范几乎允许任何字符串。

在 JavaScript 中,这更宽松,JavaScript 对象不需要在 属性 名称周围加上引号,当这些名称很简单时(a-z、A-Z、0-9、_、 $),否则,出于语言解析原因,需要引号来消除歧义。

如果您希望从字符串值设置 属性,只需执行以下操作:

{
  [myStringVariable] : true
}

无需摸索引号,这使您可以使用几乎任何字符串设置 属性。因此,您可以在定义这些字段名称的代码中设置一些常量,然后以一致的方式执行此操作:

const FIELD1 = "my& crazy**field-name";  // Or from some schema definition.
// etc. other field consts.

let myObject = {
  [FIELD1] : true
  // .. etc.
}

另请注意,在这个 [ ] 表示法中,您可以放置​​任何有效的 JavaScript 可以计算为字符串的表达式,例如 [myFields.field1Name] 甚至 [(someCondition ? "unknown " : "我的字段")]

最后,none 这是任何一种“标准”,只是在您的字段名称不受您控制的情况下您可能需要考虑的机制——因为当它们由您控制时,为了清楚起见,您应该使它们保持简单。