Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript属性名称中是否允许使用破折号?_Javascript - Fatal编程技术网

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

javascript属性名称中是否允许使用破折号?,javascript,Javascript,我正在考虑为jQuery创建一个简单的插件。在关于选项和设置的部分之后,我做了以下操作,但没有成功(脚本遇到设置时退出) 一旦我从背景色中删除了破折号,事情就正常进行了 var settings = { 'location' : 'top', 'backgroundColor': 'blue' // dash removed here } ... $this.css('backgroundColor', settings.backgroundColor); 是我遗漏了什么,还

我正在考虑为jQuery创建一个简单的插件。在关于选项和设置的部分之后,我做了以下操作,但没有成功(脚本遇到设置时退出)

一旦我从背景色中删除了破折号,事情就正常进行了

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

是我遗漏了什么,还是jQuery文档出错了?

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


您可以执行
设置['background-color']

更改
设置。背景色
更改为
设置['background-color']


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

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

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

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

您可以执行以下操作:

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

var result1 = myObject.propertyOne
var result2 = myObject['propertyOne']
var result3 = myObject['property-two']

我懂了。谢谢,这是我应该用的$css('backgroundColor',options['background-color']);我必须接受这个答案,因为它是正确的,并且在评论中包含了如此诙谐的玩笑。非常感谢@dan@大牛,为什么我们要用[]括号来访问它?因此,答案实际上是“是”。。。如上所示,属性名称中允许使用破折号。必须使用上面演示的方式访问它们,否则它们将被解释为减法运算符。请注意,您试图将
背景色
用作属性访问器,而不是变量。变量只能是标识符,属性访问器不那么严格,并且可以是标识符名称(不排除保留字)。但在这种情况下,
背景色既不是标识符也不是标识符名称。但这不是一个变量。这在解码请求头和变量(如“内容类型”)时很重要。我正在使用请求模块,我需要知道内容类型。我可以使用response.headers['content-type']
var myObject = {
  propertyOne: 'Something',
  'property-two': 'Something two'  
}

var result1 = myObject.propertyOne
var result2 = myObject['propertyOne']
var result3 = myObject['property-two']