在Javascript数组中,它们的索引可能存在间隙,不应该与简单的元素混淆undefined
:
var a = new Array(1), i; a.push(1, undefined); for (i = 0; i < a.length; i++) { if (i in a) { console.log("set with " + a[i]); } else { console.log("not set"); } } // logs: // not set // set with 1 // set with undefined
由于这些间隙破坏了长度属性,我不确定,如果可能的话应该避免它们.如果是这样,我会将它们视为边缘情况,而不是默认情况下:
// default: function head(xs) { return xs[0]; } // only when necessary: function gapSafeHead(xs) { var i; for (i = 0; i < xs.length; i++) { if (i in xs) { return xs[i]; } } }
除了head
非常简洁的事实之外,另一个优点是它可以用于所有类似数组的数据类型.head
只是一个简单的例子.如果在整个代码中需要考虑这些差距,则开销应该是显着的.