开发者社区> 问答> 正文

检查数组是否为空或不存在。

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

像这样吗

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

展开
收起
保持可爱mmm 2020-01-15 16:33:06 455 0
1 条回答
写回答
取消 提交回答
  • 您undefined要先进行检查。如果以相反的方式执行此操作,则在未定义数组的情况下将生成错误。

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

    更新资料

    这个答案引起了相当多的关注,因此我想指出,我的原始答案比其他任何事情都更能解决问题中所评估条件的错误顺序。从这个意义上讲,它无法解决几种情况,例如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 }

    分解:

    Array.isArray()毫不奇怪,它检查其参数是否为数组。这杂草淘汰的价值观一样null,undefined和其他任何不是数组。
    请注意,这还将消除类似数组的对象,例如arguments对象和DOM NodeList对象。根据您的情况,这可能不是您要遵循的行为。
    
    该array.length条件检查是否变量的length属性值将为一个truthy值。由于先前的条件已经确定我们确实在处理数组,因此此处不需要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 }

    问题来源于stack overflow

    2020-01-15 16:33:20
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载