在 Javascript 中使用这种循环是否安全?
denseArray = [1,2,3,4,5, '...', 99999]
var x, i = 0
while (x = denseArray[i++]) {
document.write(x + '<br>')
console.log(x)
}
document.write('Used sentinel: ' + denseArray[i])
document.write('Size of array: ' + i)
它比 for 循环更短,并且对于大数组可能更有效,使用内置哨兵。一个定点 标志主叫方的事实,一些很出的最普通的发生。
阵列必须是密集阵列才能工作!这意味着除了数组中最后一个元素之后的值之外,没有其他 undefined
值。我几乎从不使用稀疏数组,只使用密集数组,所以这对我来说没问题。
要记住的另一个更重要的点(感谢@Jack Bashford 提醒)是这不仅仅是未定义为哨兵。如果数组值为 0、false 或任何其他虚假值,则循环将停止。因此,您必须确保数组中的数据没有虚假值,即0
, ""
, ''
, ``, null
,undefined
和NaN
。
这里是否存在“超出范围”的问题,或者我们可以将 Javascript 中的数组视为“无限”,因为长内存未满?undefined 是否意味着浏览器可以将其设置为任何值,因为它是未定义的,还是我们可以认为条件测试始终有效?Javascript 中的数组很奇怪,因为“它们是对象”,所以最好问一下。
我无法找到使用这些标签#2的答案: [javascript] [sentinel] [while-loop] [arrays]
。它给出零结果!
我已经考虑了一段时间并使用它足以开始担心。但我想使用它,因为它优雅、易于查看、简短,可能在大数据中有效。i
数组的大小很有用。
更新
@Barmar 告诉:JS 保证未初始化的数组元素将返回未定义的值。
MDN 确认:使用无效的索引号返回未定义。
@schu34 的注释:最好使用denseArray.forEach((x)=>{...code})
针对其用途进行优化并为开发人员所知的。无需遇到虚假值。它有很好的浏览器支持。
慕码人8056858
慕的地10843
相关分类