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

IT技术 javascript properties
2021-01-29 13:11:30

我正在使用此脚本来制作所有继承等样式的样式对象。

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

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

6个回答

看看评论。您将看到,对于 CSS 属性,关键符号与许多属性不兼容。因此,使用驼峰式键符号是当前的方式:

obj.style-attr // would become

obj["styleAttr"]

使用键符号而不是点

style["text-align"]

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

arr[0]

或对象

obj["method"] == obj.method

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

  1. 它们被评估,因此使用字符串,除非您正在使用计数器或使用动态方法名称执行某些操作。

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

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

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

[a-zA-Z_$][0-9a-zA-Z_$]*
删除了我的反对意见,因为另一位响应者指出 CSS 集合恰好是 hte 问题的主题,但实际问题是如何获得带连字符的属性。
2021-03-20 13:11:30
什么浏览器?IE7、IE8、FFX 3.5 中的连字符对我来说失败了。而且,失败我的意思是为这两个显示“未定义”......
2021-03-24 13:11:30
@brian 有趣,在 firefox6 中不起作用,我不知道...每天学习新东西
2021-03-24 13:11:30
@brian 在 safari 和 chrome 中测试显示红色,红色,中心,中心。我现在就试试 ff
2021-03-30 13:11:30
键符号在此处不适用 - css 在键中使用驼峰式大小写定义样式: jsfiddle.net/49vkD
2021-04-07 13:11:30

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

obj['property-with-hyphens'];

一些人指出您感兴趣的属性是 CSS 属性。带有连字符的 CSS 属性会自动转换为驼峰式大小写。在这种情况下,您必须使用驼峰式名称,例如:

style.textAlign;

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

obj['a-b'] = 2;
alert(obj.aB);          // undefined
alert(obj['a-b']);      // 2
@Brian 你对 CSS 属性是正确的。但是,我正在回答最初的一般问题“如何引用带有连字符的 javascript 对象属性?” 这是 jsfiddle 的更新版本:jsfiddle.net/49vkD/1
2021-03-14 13:11:30
事实上,我自己缩小了答案的范围 - 我认为 OP 是指特定样式的对象。删除了我的反对票,因为问题比这更开放。
2021-03-18 13:11:30
必须使用驼峰式命名。能够
2021-03-20 13:11:30
我认为你是对的。这大概就是达蒙想要的。我读得太字面了。
2021-03-29 13:11:30

带有 的 CSS 属性-在 JavaScript 对象中以驼峰命名。那将是:

alert( style.textAlign );

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

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

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

不要使用第二个代码。CSS 属性是驼峰式的。您的代码可能适用于某些浏览器,但不是标准的。
2021-03-15 13:11:30
后者有效......我刚刚错过的那些语法之一。我引用的脚本使用了常规的 css 样式名称,但了解它仍然很有用!
2021-03-28 13:11:30
属性名称可以包含大量 Unicode 字符。规范没问题,浏览器也没问题。例如:var ò_ó = 'angry';
2021-04-07 13:11:30
属性名称不能以数字开头
2021-04-09 13:11:30

使用括号:

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

console.log(notTheFlippingStyleObject["a-b"] === 1); // true

关于对象的更多信息:MDN

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

你不是在安抚我——你是在安抚 w3c 标准,根据这个问题的众多其他回答者:w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSS2Properties,但同样赞成。 ..
2021-03-16 13:11:30
不要使用此代码。并不是骆驼大小写的 CSS 属性更跨浏览器,而是使用连字符而不是骆驼大小写是不标准的,不应该工作。
2021-04-05 13:11:30
alert(style.textAlign)

或者

alert(style["textAlign"]);