2016-11-05 21 views
1

我想要静态声明一个Javascript对象(有时称为“关联数组”),其属性名称(“键”)包含破折号?如何静态声明其属性名称(a.k.a键)包含破折号的Javascript对象实例(a.k.a“关联数组”)?

没有破折号(作品):

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"这样的性质,但这是一个完全其他的故事,我只是在谈论这种对象的静态声明的情况。)

+0

相关:http://stackoverflow.com/q/17574355/4642212 – Xufox

+0

仅供参考,这就是所谓的*括号标记*和*点符号*(符号无关用数组)。不,这实际上比你想象的更密切。如果属性名称不是有效的标识符名称,则必须使用括号表示法+字符串文字。同样,对于对象文字,如果属性名称不是有效的标识符名称,则必须使用字符串文字。同样的道理,同样的解 –

回答

3

你必须在报价中包装属性名称以读取“field-1”a是一个字符串。

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"]) 
+2

请详细说明原因。 –

+0

非常好,谢谢! (尽管为了一致性和避免不必要的混淆,请在“计算属性”示例代码中将“bbbb”更改为“bbb”) – QuestionOverflow

2

内的对象文本,属性名称可以在方式定义:

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

field-1既不是那些。这不是一个标识符,因为字符-在标识符名称中无效。知道某事是否是有效的标识符名称相对容易:如果它不是关键字而不是有效的变量名称,则它不是有效的标识符名称。也就是说,因为声明变量是无效的

var field-1 = 42; 

您不能在对象文本中使用它。

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

myObject = {'field-1':"aaa"}; 
相关问题