如何引用带有连字符的javascript对象属性?

Dam*_*mon 96 javascript properties

使用此脚本制作所有继承的等样式的样式对象.

var style = css($(this));
alert (style.width);
alert (style.text-align);
Run Code Online (Sandbox Code Playgroud)

使用以下内容,第一个警报将正常工作,但第二个警报不会...它将解释-为减去我假设..调试器说'未捕获的引用错误'.不过,我不能在它周围加上引号,因为它不是一个字符串.那么我该如何使用这个对象属性呢?

aus*_*nbv 137

编辑

查看您将看到的注释,对于css属性,键符号与许多属性不兼容.因此,使用驼峰案例键符号是当前的方式

obj.style-attr // would become 

obj["styleAttr"]
Run Code Online (Sandbox Code Playgroud)

使用关键符号而不是点

style["text-align"]
Run Code Online (Sandbox Code Playgroud)

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

arr[0]
Run Code Online (Sandbox Code Playgroud)

或对象

obj["method"] == obj.method
Run Code Online (Sandbox Code Playgroud)

以这种方式访问​​属性时要记住的几件事情

  1. 它们被评估,因此除非您使用计数器或使用动态方法名称,否则请使用字符串.

    这意味着obj [method]会给你一个未定义的错误,而obj ["method"]则不会

  2. 如果使用js变量中不允许的字符,则必须使用此表示法.

这个正则表达式几乎总结了它

[a-zA-Z_$][0-9a-zA-Z_$]*
Run Code Online (Sandbox Code Playgroud)


jAn*_*ndy 16

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

alert( style.textAlign );
Run Code Online (Sandbox Code Playgroud)

您还可以使用括号表示法来使用字符串:

alert( style['text-align'] );
Run Code Online (Sandbox Code Playgroud)

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

  • 也允许`_`. (2认同)

Sto*_*ney 14

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

obj['property-with-hyphens'];
Run Code Online (Sandbox Code Playgroud)

有几个人指出你感兴趣的属性是CSS属性.具有连字符的CSS属性会自动转换为驼峰套管.在这种情况下,您可以使用骆驼外壳名称,如:

style.textAlign;
Run Code Online (Sandbox Code Playgroud)

但是,此解决方案仅适用于CSS属性.例如,

obj['a-b'] = 2;
alert(obj.aB);          // undefined
alert(obj['a-b']);      // 2
Run Code Online (Sandbox Code Playgroud)

  • @Brian您对CSS属性是正确的。但是,我正在回答原始的一般性问题“如何引用带有连字符的javascript对象属性?” 这是您的jsfiddle的更新版本:http://jsfiddle.net/49vkD/1/ (2认同)

Joe*_*Joe 6

使用括号:

var notTheFlippingStyleObject = {
    'a-b': 1
};

console.log(notTheFlippingStyleObject["a-b"] === 1); // true
Run Code Online (Sandbox Code Playgroud)

有关对象的更多信息:MDN

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

  • **不要使用此代码。** 并不是驼峰式 CSS 属性更跨浏览器,而是使用连字符而不是驼峰式大写是不标准的,不应该工作。 (2认同)

Daw*_*oth 5

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


Bri*_*ian 5

alert(style.textAlign)
Run Code Online (Sandbox Code Playgroud)

或者

alert(style["textAlign"]);
Run Code Online (Sandbox Code Playgroud)