如何静态声明一个属性名(键)包含破折号的Javascript对象实例(关联数组)?

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

本文关键字:Javascript 破折号 包含 对象 实例 数组 关联 属性 静态 何静态 声明      更新时间:2023-09-26

我想静态地声明一个Javascript对象(有时被称为"关联数组"当这样使用时),其属性名称("键")包含破折号?

不带破折号(works):

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

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

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

(是的,我完全知道这种包含破折号的属性只能通过使用"括号符号"而不是"点符号"来引用,但那完全是另一回事,我在这里只谈论这种对象的静态声明的情况。)

您必须将属性名称用引号括起来以将"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"])

在对象文本中,属性名可以用四种方式定义:

  • 作为标识符名称(foo)
  • 作为数字字面值(42)
  • 作为字符串字面值('foo bar')
  • 作为计算属性([foo + 'bar'])

field-1都不是。它不是标识符,因为字符-在标识符名称中无效。要知道某个东西是否是有效的标识符名相对容易:如果它不是关键字,也不是有效的变量名,那么它就不是有效的标识符名。也就是说,因为声明变量

是无效的
var field-1 = 42;

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

必须使用字符串字面值。字符串字面值可以包含任何字符序列:

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