如何检查数组是否为空或不存在?
2022-08-29 22:37:45
检查数组是否为空或不存在的最佳方法是什么?
像这样的东西?
if(array.length < 1 || array == undefined){
//empty
}
检查数组是否为空或不存在的最佳方法是什么?
像这样的东西?
if(array.length < 1 || array == undefined){
//empty
}
您想先进行检查。如果以相反的方式执行此操作,则如果数组未定义,它将生成错误。undefined
if (array === undefined || array.length == 0) {
// array does not exist or is empty
}
这个答案得到了相当多的关注,所以我想指出,我最初的答案,最重要的是,解决了问题中评估条件的错误顺序。从这个意义上说,它无法解决几种方案,例如值,具有属性的其他类型的对象等。它也不是非常惯用的JavaScript。null
length
万无一失的方法
从评论中汲取一些灵感,以下是我目前认为是检查数组是否为空或不存在的万无一失的方法。它还考虑到变量可能不是引用数组,而是引用具有属性的某种其他类型的对象。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()
不出所料,检查其参数是否为数组。这将清除像 这样的值,以及其他任何不是数组的值。
请注意,这也将消除类似数组的对象,例如参数
对象和 DOM NodeList
对象。根据您的情况,这可能不是您想要的行为。null
undefined
该条件检查变量的属性的计算结果是否为真值。因为前面的条件已经确定我们确实在处理数组,所以这里需要更严格的比较,比如或不需要。array.length
length
array.length != 0
array.length !== 0
在很多情况下,务实的方法
可能看起来有些过分。也许你正在使用像TypeScript这样的高阶语言,它在编译时为你做大部分的类型检查,或者你真的不关心对象实际上是一个数组,或者只是数组。
在这些情况下,我倾向于以下更惯用的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
}