js判断数组为空或null

方法:

    let value = {}
    value && Object.keys(value).length === 0 && value.constructor === Object;

原因:

    let a = {}
    let b = new Object()
    let c = new String();
    if(Object.keys(a).length === 0 && a.constructor === Object){ //true
      console.log('数组为空或null')
    }
    if(Object.keys(b).length === 0 && b.constructor === Object){ //true
      console.log('数组为空或null')
    }
    if(Object.keys(c).length === 0 && c.constructor === Object){ //false
      console.log('数组为空或null')
    }
    // 补充:对constructor进行检查,是为了覆盖包装器实例,仅使用Object.keys,当对象为空时,它的确会返回true,但是,当我们使用除new Object()以外的构造函数创建新的对象实例时
    if(Object.keys(c).length){  //true
      console.log('数组为空或null')
    }
    //console.log('数组为空或null')
    //所以,需要对constructor进行检查

    function isElementObject (value){
      return Object.keys(value).length === 0 && value.constructor === Object;
    }

    // 当心,对null和undefined值的判断会引发TypeError错误,例如:
    console.log(isElementObject(null))
    console.log(isElementObject(undefined))
    //"TypeError: Cannot convert undefined or null to object"

    //改进:对null和undefined的空检查,最终:
    function isElementObject2 (value){
      return value && Object.keys(value).length === 0 && value.constructor === Object;
    }
    console.log(isElementObject2(null))
    console.log(isElementObject2(undefined))

 

posted @ 2022-07-08 10:54  最爱小虾  阅读(2330)  评论(0编辑  收藏  举报