如何静态声明 Javascript 对象实例 (a.k.a "associative array"),其 属性 名称(a.k.a 键)包含破折号?

How can I statically declare a Javascript object instance (a.k.a "associative array") whose property names (a.k.a keys) contain dashes?

我想静态声明一个 Javascript 对象(有时在使用时称为 "associative array"),其 属性 名称 ("keys") 包含破折号?

没有破折号(有效):

myObject = {field_1:"aaa", field_2:"bbb"};

带破折号(导致语法错误):

myObject = {field-1:"aaa", field-2:"bbb"};

(是的,我完全知道此类属性包含破折号 can only be referenced by using "bracket notation" rather than "dot notation",但那完全是另一回事,我在这里只讨论此类对象的静态声明的情况。)

您必须将 属性 名称括在引号中才能将 "field-1" 读取为字符串。

var myObject = {"field-1":"aaa", "field-2":"bbb"}
console.log(myObject["field-1"], myObject["field-2"])

//computed properties
var name1 = "field-1"
var name2 = "field-2"

var myObject = {
     [name1]: "aaa",
     [name2]: "bbb"
}

console.log(myObject["field-1"], myObject["field-2"])

在对象字面量中,属性 名称可以四种 方式定义:

  • 作为 identifier name (foo)
  • 作为数字文字 (42)
  • 作为字符串文字 ('foo bar')
  • 作为计算结果 属性 ([foo + 'bar'])

field-1 两者都不是。它不是标识符,因为字符 - 在标识符名称中无效。知道某物是否是有效的标识符名称相对容易:如果它不是关键字且不是有效的变量名称,则它不是有效的标识符名称。也就是说,因为声明变量是无效的

var field-1 = 42;

你也不能在对象字面量中使用它。

您必须改用字符串文字。字符串文字可以包含任何字符序列:

myObject = {'field-1':"aaa"};