判断为空的方法千篇一律,此处只是针对本人工作中遇到的一些坑做出总结,大家可以根据自己的工作需要自由组合,封装成一个公共方法,避免一些不必要的问题。
1.在操作该参数前,做非空判断
//常用作临时解决线上报错等问题
var a = '';
if(a && a.toLowerCase()){
console.log('参数不为空')
}else{
console.log('参数为空')
}
2.typeof,判断类型是否是undefined
var b;
if(typeof b == 'undefined') {
console.log('b is undefined');
}
3.直接判断一个字符串是否为空
var c = '';
if(c === ''|| c === null || c === undefined) {
console.log('参数为空');
} else {
console.log('参数不为空');
}
4.使用 string.trim()函数
//trim()会移除字符串首尾的空格,可以字符串调用后,在取其length判断是否为0
var d = '';
d.trim().length == 0;//true,字符串是空字符串
d = ' ';
d.trim().length == 0;//true,字符串是空字符串
d = ' 1 ';
d.trim().length == 0;//false,此时 d.trim() == ‘1’ 字符串不为空
5.正则表达式: /(^\s)|(\s$)/g**
//当浏览器不支持tirm()时,请使用该正则,功能与用法通 tirm() 一致
var e = '';
e.replace(/(^\s*)|(\s*$)/g, '').length == 0;//true,字符串是空字符串
e = ' ';
e.replace(/(^\s*)|(\s*$)/g, '').length == 0;//true,字符串是空字符串
e = ' 1 ';
e.replace(/(^\s*)|(\s*$)/g, '').length == 0;//false,此时 d.trim() == ‘1’ 字符串不为空
6.判断一个数组是否为空
var f = [];
if(f.length == 0) {
console.log('数组为空');
} else {
console.log('数组不为空');
}
//['',''],一般这种形式不纳入考虑,这种情况下length不为0;
7.判断一个对象是否为空
//方法一:将对象转行成JSON字符串形式,判断字符串是否为‘{}’
var g = {};
var h = JSON.stringify(g) == '{}';
console.log(h);
//方法二:for...in循环
var obj = {};
var i = function () {
for (var item in obj) {
return false;//不为空
}
return true;//为空
}
console.log(i());
//方法三:jQuery的$.isEmptyObject()
//此方法是jQuery将方法二的for...in进行了封装,此时需要依赖于jQuery
var data = {};
var j = $.isEmptyObject(data);
console.log(j);
8.检测对象的属性是否存在
var k = {};
if(!k.age) {
console.log('没有age属性');
}
9.直接使用未定义的对象来判断,也会出错
//注意判断或调取时,变量名是否书写正确
if(!obj111){
console.log('没有obj111这个变量');
obj111 = {};//Uncaught ReferenceError: obj111 is not defined
}
10.使用in运算符
//obj1 是一个变量,如果当前页面未定义,则 ‘obj1’ in window 会返回false
if(!('obj1' in window)) {
console.log('没有obj1这个变量');
}
11.使用hasOwnProperty()
//检查一个属性是否是某个对象的自带属性,没有定义对象默认指当前window对象
if(!this.hasOwnProperty('obj2')){
console.log('没有obj12这个变量'); //当前页面没有定义obj2
this.obj2 = {};
}