CoffeeScript 中的数组元素存在检查怪癖

Array element presence check quirks in CoffeeScript

当通过 in 关键字检查内联数组中的元素是否存在时,CoffeeScript 会忽略 indexOf 而是进行许多相等性检查。

但是,当通过变量引用数组时,它会按预期调用 indexOf

输入

foo = 1

# -----------
foo in [1, 2, 3, 4, 5]

# -----------
bar = [1, 2, 3, 4, 5]
foo in bar

输出

var bar, foo,
  indexOf = [].indexOf;

foo = 1;

// -----------
foo === 1 || foo === 2 || foo === 3 || foo === 4 || foo === 5;

// -----------
bar = [1, 2, 3, 4, 5];

indexOf.call(bar, foo) >= 0;

演示代码:Link

我觉得这很有趣。有什么想法吗?

显然,这是为了节省数组分配而进行的优化。

发件人:https://github.com/jashkenas/coffeescript/issues/5392