js类型判“空”

81 阅读1分钟

今日处理时突然意识到一个问题:前后端对于空值的理解不一样,导致后端返回空值后前端显示了:

  • 前端认为空字符串''是空值,空字符串中带空格' '是有值的
  • 后端认为这些都是空值

查了下,后端使用StringUtils.isBlank方法判空,其中的null''' ''\n\t\r'等都是空值。由于之前被Boolean(0) === false坑过,被解构赋值坑过(只有当属性值为undefined时,才会给默认值),因此写一个自己的判空函数

// js数据类型 
// null undefined
// number 0 
// string ' '
// object {}
const isBlank = (value)=>{
    if(value === undefined || value === null){
        return true;
    }

    if(value === 0){
        return false
    }

    if(typeof value === 'string'){
        return !value.trim().length
    }


    if(typeof value == Boolean){
        return false;
    }
    if(typeof value === 'object' ){
        return Object.keys(value).length < 1
    }
    return !value;
}

let testData = [undefined, null, 0, '0', '', '  ', '\n', {a: 1}, {} ]
// let testData = [ 0, '0', '', '  ', '\n']
// console.log(isBlank(null))

testData.map(item=>{
    console.log(item, isBlank(item), typeof item)
})

注意点:

  1. Boolean(0) == false
  2. 空字符串为false
  3. 默认状态下' '为true
  4. Boolean(false) == false
  5. object 通过属性值方式进行判断,Object。keys只查询该对象自身属性,不查询原型链属性