如何静态声明 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"};
我想静态声明一个 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"};