前言:
在讲正文之前,我想首先在这里提一下js的几种数据类型。在js中数据一共分为两大类,分别是基本数据类型和引用类型——Object。
基本数据类型:
- Underdined
- Null
- Boolean
- Number
- String
引用类型(Object):
- Function
- Array
- Object
- Date
- RegExp
引用类型大概是这几种,还有基本包装类型也是引用类型的一种,ECMAScript还提供了 3个特殊的引用类型:Boolean、Number和String。
对于基本类型而言,判断变量是否为空数据就很简单了,
let a = '';
let b = 0;
let c = underfined;
let d = null;
let e = false;
由于空数据判断多用在对后台返回的接口数据的判断,所以在这里只讨论字符串、数字0,数组、对象、Null的情况
let a = ''或者 let a = 0 或者 let a = null;
1、if( a === '' || a === 0 || a === null) {
console.log(a === '' || a === 0 || a === null); // true
}
2、if( !a) {
console.log(!a); // true
}
对于字符串还有一种方式判断,就是用length属性:
let a = '';
console.log(!a.length); // true
当变量是空数组或者空对象时, 对变量取反的值是false,即
let arr = [];
let obj = {};
console.log(!arr,!obj); // false false
原因是 if ( [ ] ) 是判断[ ] 是否是真值,但是假值只有6个,就是 false,undefined,null,0,"",NaN ,因此空数组和空对象都是真值,不能用取反的方式去判断数据是否为空,对于数组可以用lengtn属性去判断。
let arr = [];
1、可以使用数组的length属性判断( 已知变量类型是数组 )
console.log(!arr.length); // true
console.log(arr.length === 0); // true
2、可以先将其转换成字符串,再与[]比较( 已知变量类型是数组 )
console.log(JSON.stringify(obj) === '[]'); // true
而对于空对象而言,判断方法总结了以下几种:
let obj = {};
1、可以先将其转换成字符串,再与{}比较 ( 已知变量类型是对象 )
console.log(JSON.stringify(obj) === '{}'); // true
2、可以遍历对象,没有属性的话就是空( 已知变量类型是对象 )
for(let key in obj) {
console.log(false);
}
console.log(true); // true
3、ES6的Object.keys()方法,会将对象中的属性转成一个数组,再判断数组是否为空即可( 已知变量类型是对象 )
var arr = Object.keys(obj);
console.log(arr.length === 0); // true
4、与方法3类似,js中有个getOwnPropertyNames()的方法,也是将对象中的除原型属性以外的所有属性转成一个数组( 已知变量类型是对象 )
var arr = Object.getOwnPropertyNames(obj);
console.log(arr.length === 0); // true
总结:
当然以上大多数方法都是基于已知数据类型的前提下的,当我们不知道数据类型时,还需要额外进行判断,在之后的学习中会总结,有需要的小伙伴可自取。