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

IT技术 javascript
2021-01-21 15:03:42

我正在查看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

从背景颜色中删除破折号后,一切正常。

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

我是不是遗漏了什么,还是 jQuery 文档有误?

5个回答

不。解析器将其解释为减法运算符。

你可以settings['background-color']

必须接受这个答案,因为它是正确的,并且在评论中包含如此诙谐的玩笑。
2021-03-27 15:03:42
非常感谢这个@dan!
2021-03-28 15:03:42
因此,答案实际上是“是”...属性名称允许使用破折号,如上所示。必须使用上面演示的方式访问它们,否则它们将被解释为减法运算符。
2021-04-08 15:03:42
我知道了。谢谢,这是我应该使用的。$this.css('backgroundColor', options['background-color']);
2021-04-09 15:03:42
@Daniel,为什么我们需要为 Acess 使用 [] 括号呢?
2021-04-12 15:03:42

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

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

这在解码请求标头和变量(例如“内容类型”)时很重要。我正在使用请求module,我需要知道内容类型。我可以使用 response.headers['content-type']
2021-03-15 15:03:42

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

但这不是一个变量。
2021-03-25 15:03:42

您可以在字符串中使用破折号。如果你真的想保留那个破折号,你必须使用括号和诸如此类的东西来引用属性:

$this.css('backgroundColor', settings['background-color']);

你可以这样做:

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

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