是否允许在javascript属性名称中使用破折号?

xec*_*s12 55 javascript

我正在查看http://docs.jquery.com/Plugins/Authoring#Defaults_and_Options来为jQuery创建一个简单的插件.在关于选项和设置的部分之后,我执行了以下操作,但这些操作无效(脚本在遇到设置时退出).

var settings = {
    'location' : 'top',
    'background-color': 'blue'
}
...
$this.css('backgroundColor', settings.background-color); // fails here
Run Code Online (Sandbox Code Playgroud)

一旦我从背景颜色中删除了短划线,一切正常.

var settings = {
    'location' : 'top',
    'backgroundColor': 'blue' // dash removed here
}
...
$this.css('backgroundColor', settings.backgroundColor); 
Run Code Online (Sandbox Code Playgroud)

我错过了什么,或者jQuery文档错了吗?

Dan*_*ite 110

没有.解析器会将其解释为减法运算符.

你能做到的settings['background-color'].

  • 必须接受这个答案,因为它是正确的,并在评论中包括这种诙谐的戏.. (6认同)
  • 因此,答案实际上是“是”...属性名称中允许使用破折号,如上所示。必须使用上述演示的方式访问它们,否则它们将被解释为减法运算符。 (3认同)

Roc*_*mat 16

更改settings.background-colorsettings['background-color'].

变量不能包含,-因为它被读作减法运算符.


Jar*_*Par 8

破折号在javascript变量中不合法.变量名必须以字母,美元符号或下划线开头,后跟相同或数字.

  • 但这不是一个变量。 (3认同)

sdl*_*rhc 5

字符串中可以有破折号。如果您确实想保留该破折号,则必须使用括号之类的内容来引用该属性:

$this.css('backgroundColor', settings['background-color']);
Run Code Online (Sandbox Code Playgroud)


Pri*_*ome 5

你可以这样做:

var myObject = {
  propertyOne: 'Something',
  'property-two': 'Something two'  
}

for (const val of [
  myObject.propertyOne,
  myObject['propertyOne'],
  myObject['property-two']
  ]){
  console.log(val)
}
Run Code Online (Sandbox Code Playgroud)