空对象、空字符串、null的判断方法

工作期间发现判断空对象有点生疏,顺便归纳一下 空字符串 null 还有 空对象 的判断方法。

判断空对象

ES6 Object.keys()+length

  • Object.keys()遍历对象所有可枚举属性,不包括原型链上的属性。(仅自身属性)
1
2
3
4
5
6
7
var obj = {};
var arr = Object.keys(obj);
if (arr.length == 0){
console.log("对象为空");
}else {
console.log("对象不为空");
}

JSON.stringify()

1
2
3
4
5
6
7
var obj = {};
var objStr = JSON.stringify(obj);
if(objStr === '{}') {
console.log("对象为空");
}else {
console.log("对象不为空");
}

判断空字符串

不考虑空格

1
2
3
4
const strings = ''; 
if (string.length == 0) {
alert('不能为空');
}

考虑空格

正则

  • string的replace() 方法
  • 正则中\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
  • 方法1:使用 正则 去除头尾的空格:
    1
    2
    3
    4
    5
    const strings = ' '; 
    // 去除头尾的空格
    if (strings.replace(/(^\s*)|(\s*$)/g, "").length == 0) {
    alert('不能为空');
    }
  • 方法2:使用 正则 判断空格是否出现过:
  • []为表达式,匹配[...]中的所有字符
  • +号代表前面的字符必须至少出现一次(1次或多次)
    1
    2
    3
    4
    5
    6
    7
    function isNull( str ){
    if ( str == "" ) return true;
    // 判断空格至少出现一次
    var regu = "^[ ]+$";
    var re = new RegExp(regu);
    return re.test(str);
    }

trim()

  • 使用str.trim()删除字符串的头尾空白符
    1
    2
    3
    4
    5
    const strings = ' '; 
    // 去除头尾的空格
    if (strings.trim().length == 0) {
    alert('不能为空');
    }

判断null

不要使用!

  • 会误判undefined/数字零/false:
    1
    2
    3
    4
    5
    const exp = null; 
    // 如果 exp 为 undefined/数字零/false,也会得到与 null 相同的结果
    if (!exp) {
    alert("is null/undefined/0/false");
    }

不要使用==

  • 会同时判断null与undefined的情况,毕竟null == undefined

不要使用typeof

  • typeof判断 除null 的基础类型,null 空指针,也算是一个对象
    1
    typeof null === 'object' // true
, ,