Answers:
如果您算自己的孩子,您会说“我的第一个孩子”,“我的第二个孩子”等等,而不是“我的第一个孩子”。这就是人类的计数方式。(注意:这不是我的主观意见。这实际上是序数的工作方式。)
甚至问这个问题的原因可能是因为您是一名程序员,并且许多编程语言都将数组和列表项从0开始索引。其原因是,在像C这样的低级语言中,数组实际上是指向内存地址的指针第一项的索引是索引相对于此指针的偏移量。因此,array[0]
意味着第一项的array[1]
地址,意味着第一项的地址加上一项的大小,即第二项的大小,依此类推。
许多不直接支持指针算术的高级语言都保留了基于0的索引,以保持一致性和熟悉性。例如,即使JavaScript中的数组以完全不同的方式实现,所有具有C派生语法的语言(包括JavaScript)也是如此。但这根本不是通用的-COBOL,Fortran,Lua和某些Basic的语言都使用基于1的索引。(Visual Basic通过使其可配置而自然选择了两者中最糟糕的一个。)因此,绝对不是像其他每种语言都使用基于0的索引一样。出于其价值,XPath和XQuery还使用基于1的索引。
虽然大多数程序员都熟悉基于1和0的索引,但是普通人自然会从1开始计数,而CSS是一种语言,不仅为程序员设计,还为设计师和图形专业人员设计,因此选择基于1的索引是很自然的。 。
根据CSS 3级选择器规范:
6.6.5.2。:nth-child()伪类
的
:nth-child(an+b)
伪级符号代表具有一个元素an+b-1
的兄弟姐妹之前它在文档树中,对于任何正整数或零值n
,且具有父元素。对于值a
和b
大于零,这有效地将所述元素的子元素的成组a
元件(最后一组服用余数),并选择b
每一组的第i个元素。例如,这允许选择器寻址表中的每隔一行,并可用于以四个为周期交替显示段落文本的颜色。的a
和b
值必须是整数(正,负或零)。元素的第一个孩子的索引是1。
通过示例对它进行了更详细的介绍。看来,的最终计算an+b
必须为正数。
当
a
= 0时,不需要包括b
零件(除非零件已被省略)。当an
不包括且b
为非负数时,b
也可以省略前面的(+)号(允许时)。在这种情况下,语法简化为:nth-child(b)
。如果
a
和b
都等于零,则伪类在文档树中不表示任何元素。
最后一段中的其他格式是我的重点。
可能是为了与另一种XML / HTML处理语言XPath保持一致。哪个提出了问题,为什么XPath使用基于1的索引?
看到 /programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0
相关的(但有争议的报价)是:
“ ...基于X的逻辑是XPath和XSLT的正确选择...因为该语言是为用户而非程序员而设计的,并且用户仍然习惯于将书中的第一章称为第一章...”