检查数组是否为空或不存在的最佳方法是什么?
像这样的东西?
if(array.length < 1 || array == undefined){ //empty }
首先要检查undefined。如果你反过来做,如果数组是未定义的,它会生成一个错误。
undefined
if (array === undefined || array.length == 0) { // array does not exist or is empty }
这个答案得到了相当多的关注,所以我想指出的是,我最初的答案,比其他任何东西都更重要的是,解决了问题中评估条件的错误顺序。从这个意义上说,它无法解决一些场景,例如null值,具有length属性的其他类型的对象,等等。它也不是非常习惯的JavaScript。
null
length
if (!Array.isArray(array) || !array.length) { // array does not exist, is not an array, or is empty // ⇒ do not attempt to process array }
分解一下:
Array.isArray(),不出所料,检查它的参数是否为数组。这将清除像null, undefined这样的值以及任何其他不是数组的值。 注意,这也将消除类数组对象,例如arguments对象和DOM NodeList对象。根据你的情况,这可能不是你所追求的行为
Array.isArray()
arguments
NodeList
array.length
array.length != 0
array.length !== 0
在这种情况下,我倾向于使用以下更习惯的JavaScript:
if (!array || !array.length) { // array or array.length are falsy // ⇒ do not attempt to process array }
或者,更常见的是它的逆:
if (array && array.length) { // array and array.length are truthy // ⇒ probably OK to process array }
随着ECMAScript 2020中可选链操作符 (Elvis操作符)的引入,这可以进一步缩短:
if (!array?.length) { // array or array.length are falsy // ⇒ do not attempt to process array }
或者正相反:
if (array?.length) { // array and array.length are truthy // ⇒ probably OK to process array }