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
我觉得这很有趣。有什么想法吗?
显然,这是为了节省数组分配而进行的优化。
当通过 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
我觉得这很有趣。有什么想法吗?
显然,这是为了节省数组分配而进行的优化。