我如何引用一个JavaScript对象属性连字符?

使用此脚本来创build所有inheritance的样式的样式对象。

var style = css($(this)); alert (style.width); alert (style.text-align); 

与以下,第一个警报将正常工作,但第二个不..它正在解释-作为一个减号,我认为…debugging器说'未捕获的参考错误'。 不过,我不能把它引起来,因为它不是一个string。 那么如何使用这个对象属性呢?

编辑

看看你会看到的CSS的注释符号与许多属性不兼容。 因此,使用骆驼案件的键符号是目前的方式

 obj.style-attr // would become obj["styleAttr"] 

使用键符号而不是点

 style["text-align"] 

js中的所有数组都是对象,所有对象只是关联数组,这意味着您可以像引用数组中的键一样引用对象中的某个位置。

 arr[0] 

或对象

 obj["method"] == obj.method 

这样访问属性时要记住几件事情

  1. 他们被评估,所以使用string,除非你正在做计数器或使用dynamic方法名称的东西。

    这意味着obj [方法]会给你一个未定义的错误,而OBJ [“方法”]不会

  2. 如果您使用jsvariables中不允许的字符,则必须使用此表示法。

这个正则expression式几乎总结了它

 [a-zA-Z_$][0-9a-zA-Z_$]* 

带有- CSS属性在Javascript对象的camelCase中表示。 那将是:

 alert( style.textAlign ); 

您也可以使用括号表示法来使用string:

 alert( style['text-align'] ); 

属性名称只能包含字符,数字,众所周知的$符号和_ (感谢pimvdb)。

原始问题的答案是:将属性名称放在引号中,并使用数组样式索引:

 obj['property-with-hyphens']; 

有几位指出,你感兴趣的财产是一个CSS属性。 具有连字符的CSS属性会自动转换为骆驼套pipe。 在这种情况下,您可以使用骆驼名称,如:

 style.textAlign; 

但是,这个解决scheme只适用于CSS属性。 例如,

 obj['a-b'] = 2; alert(obj.aB); // undefined alert(obj['a-b']); // 2 

使用括号:

 var notTheFlippingStyleObject = { 'a-b': 1 }; console.log(notTheFlippingStyleObject["ab"] === 1); // true 

更多关于对象的信息: MDN

注意:如果您正在访问样式对象CSSStyleDeclaration ,则必须使用camelCase从javascript访问它。 更多信息在这里

通过在JavaScript中使用camelCase引用带连字符的样式属性,所以使用style.textAlign

为了解决你的问题 :在其中使用连字符的CSS属性由camelCase中的JavaScript属性表示,以避免此问题。 你想要: style.textAlign

回答这个问题 :使用方括号表示法 : obj.propobj["prop"]相同,因此您可以使用string访问属性名称,并使用标识符中禁用的字符。

 alert(style.textAlign) 

要么

 alert(style["textAlign"]); 

对象属性名称不是一对一匹配的CSS名称。

我认为,在CSS样式的情况下,他们被改为在Javascript中的驼峰,所以test-align成为textAlign 。 在一般情况下,你想访问一个包含非标准字符的属性,你可以使用数组样式。 ['text-align']

直接回答这个问题: style['text-align']是你如何引用一个连字符的属性。 但是style.textAlign (或者style['textAlign'] )是这种情况下应该使用的。

起初,我想知道为什么解决scheme不能在我的最终结果

 api['data-sitekey'] //returns undefined 

…后来发现访问数据属性是不一样的:应该是这样的:

 var api = document.getElementById("some-api"); api.dataset.sitekey 

希望这可以帮助!