过去我一直使用下划线来定义HTML中的类和ID属性。但在过去几年中,我开始改用破折号, 主要是为了迎合社区中的潮流, 而不一定是因为它对我有意义。
我一直认为破折号有更多的缺点,而且我看不到好处:
代码补全和编辑
大多数编辑器将破折号视为单词分隔符,所以我无法通过Tab键快速找到想要的符号。如果类名是“featured-product
”,我必须自动完成“featured
”,输入连字符,并完成“product
”。
对于下划线“featured_product
”,则被视为一个单词,因此可以一步完成。
同样适用于通过文档导航。破折号会破坏按单词跳转或双击类名的功能。
(更普遍地说,我认为类和ID应被视为令牌,因此在破折号上轻松分割一个令牌对我来说是没有意义的.)
算术运算符的歧义
在JavaScript中,使用破折号会破坏访问表单元素的对象属性。这只有在使用下划线时才可能:
form.first_name.value='Stormageddon';
(自认为我不会使用这种方式访问表单元素,但是在决定是否使用破折号或下划线作为通用规则时,请考虑其他人可能会使用该方式。) Sass等语言(尤其是整个Compass框架)已经将破折号作为标准,即使对于变量名也是如此。它们最初也使用了下划线。这种差异的解析方式让我感到奇怪:
$list-item-10
$list-item - 10
变量命名在不同编程语言中的不一致性
从前,我在 PHP、ruby、HTML/CSS 和 JavaScript 中使用下划线命名法 (underscored_names
) 来定义变量。这种方式既方便又一致,但是为了“适应”现在的环境,我现在使用以下方式:
- 在 HTML/CSS 中使用破折号命名法 (
dash-case
) - 在 JavaScript 中使用驼峰命名法 (
camelCase
) - 在 PHP 和 ruby 中使用下划线命名法 (
underscore_case
)
这并没有太困扰我,但我想知道为什么它们会出现这样的不一致,似乎是有意为之。至少对于下划线而言,保持一致是可能的:
var featured_product = $('#featured_product'); // instead of
var featuredProduct = $('#featured-product');
这些差异会导致我们不必要地翻译字符串,同时也可能引发错误。
因此我问:为什么社区几乎普遍采用破折号,是否有任何理由超过下划线?
这里有一个相关问题,大约在这个问题开始的时候,但我认为如果真的只是品味问题,那么它就不应该(或者说不应该)成为惯例。我想了解为什么我们都会遵循这个惯例。