gpt4 book ai didi

javascript - 如何检查数组是否为空或不存在?

转载 作者:IT老高 更新时间:2023-10-28 13:11:35 26 4
gpt4 key购买 nike

检查数组是否为空或不存在的最佳方法是什么?

这样的?

if(array.length < 1 || array == undefined){
//empty
}

最佳答案

您想先检查 undefined。如果反过来,如果数组未定义,则会产生错误。

if (array === undefined || array.length == 0) {
// array does not exist or is empty
}

更新

这个答案得到了相当多的关注,所以我想指出,我最初的答案,最重要的是,解决了问题中评估条件的错误顺序。从这个意义上说,它无法解决几个场景,例如 null 值、具有 length 属性的其他类型的对象等。它也不是非常惯用的 JavaScript。

万无一失的方法
从评论中获得一些灵感,下面是我目前认为是检查数组是否为空或不存在的万无一失的方法。它还考虑到变量可能不引用数组,而是引用具有 length 属性的其他类型的对象。

if (!Array.isArray(array) || !array.length) {
// array does not exist, is not an array, or is empty
// ⇒ do not attempt to process array
}

分解:

  1. Array.isArray() ,不出所料,检查它的参数是否是一个数组。这会剔除像 nullundefined 和其他任何不是数组的值。
    请注意,这也将消除 类数组对象,例如 arguments对象和 DOM NodeList对象。根据您的情况,这可能不是您所追求的行为。

  2. array.length 条件检查变量的 length 属性的计算结果是否为 truthy值(value)。因为前面的条件已经确定我们确实在处理一个数组,所以不需要像 array.length != 0array.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
}

随着 optional chaining operator 的推出(Elvis 运算符)在 ECMAScript 2020 中,这可以进一步缩短:

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
}

关于javascript - 如何检查数组是否为空或不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com