数组的[..]和[...]之间没有区别?

时间:2014-04-20 16:36:49

标签: coffeescript

编辑:made a github issue,一天后由jashkenas关闭。因此,外卖基本上是“按预期工作”。

coffee> arr
[ 0,
  1,
  2,
  3,
  'A',
  'K' ]
coffee> arr[...]
[ 0,
  1,
  2,
  3,
  'A',
  'K' ]
coffee> arr[..]
[ 0,
  1,
  2,
  3,
  'A',
  'K' ]

According to the docs,那些应该是不同的。

  

有两个点(3..6),范围包括(3,4,5,6);有三个点(3 ... 6),范围不包括结尾(3,4,5)。

生成的两个slice语句是相同的。在我看来..应该产生.slice(0)...应该产生.slice(0, -1)我错过了什么或看到了错误?

1.7.1

1 个答案:

答案 0 :(得分:4)

然后文件继续说:

  

切片索引具有有用的默认值。省略的第一个索引默认值   为零,省略的第二个索引默认为数组的大小。

这与您所看到的一致。数组的长度为6,所以:

  • [..]相当于[0..6],可编译为.slice(0,7)
  • [...]相当于[0...6],可编译为.slice(0,6)

如果数组长度为6,则.slice(0,6).slice(0,7)都会返回所有元素,因此两者都相当于.slice(0),这是[..]和{{1}编译到。

如果省略的第二个索引默认为数组大小减去1,那么您的期望是这种情况,但事实并非如此。