过去我总是使用下划线来定义class and idHTML 中的属性。在过去的几年里,我改用破折号,主要是为了使自己与社区趋势,不一定是因为它对我有意义。
我一直认为破折号有更多的缺点,但我没有看到它的好处:
代码完成和编辑
大多数编辑器将破折号视为单词分隔符,因此我无法通过 Tab 键切换到所需的符号。说班级是“featured-product
“,我必须自动完成”featured
",输入连字符,然后完成 "product
".
带下划线“featured_product
" 被视为一个单词,因此可以一步填写。
这同样适用于浏览文档。按单词跳转或双击类名会被连字符中断。
(更一般地说,我认为类和 id 是tokens,所以对我来说,令牌应该如此容易地在连字符上分割是没有意义的。)
算术运算符的歧义
使用破折号会破坏对象属性访问表单元素在 JavaScript 中。这只能使用下划线:
form.first_name.value='Stormageddon';
(诚然,我自己不会以这种方式访问表单元素,但在决定将破折号与下划线作为通用规则时,请考虑有人可能会这样做。)
像这样的语言Sass(特别是在整个Compass框架)已决定将破折号作为标准,即使对于变量名称也是如此。他们最初也在开始时使用下划线。事实上,它的解析方式不同让我觉得很奇怪:
$list-item-10
$list-item - 10
跨语言变量命名不一致
以前,我曾经写过underscored_names
用于 PHP、Ruby、HTML/CSS 和 JavaScript 中的变量。这很方便且一致,但为了“适应”我现在使用:
-
dash-case
在 HTML/CSS 中
-
camelCase
在 JavaScript 中
-
underscore_case
在 PHP 和 ruby 中
这并没有让我太困扰,但我想知道为什么这些变得如此错位,似乎是故意的。至少使用下划线可以保持一致性:
var featured_product = $('#featured_product'); // instead of
var featuredProduct = $('#featured-product');
这些差异造成了我们必须翻译字符串不必要的,以及潜在的错误。
所以我问:为什么社区几乎普遍选择破折号,有什么理由比下划线更重要吗?
有一个相关问题从这开始的时候开始,但我认为它不是(或者不应该已经)只是一个品味问题。我想理解为什么我们都决定采用这个约定,如果这真的只是一个品味问题。