最近在工作中需要判断空数组,我想当然的以为
var arr=[],if(arr)
会为false,结果出现错误,是为真。
后来知道数组(不管是不是空的)属于对象类型,对象类型转为boolean类型(内部对应ToBoolean()操作)时都是true
所以我就测试了一些常用数据类型,和这些类型应该使用的判断方法
1、判断空数组(根据数组长度判断)
//应该使用 判断数组的长度
var arr1 = [];
if(arr1.length){
console.log('It\'s true')
}else {
console.log('It\'s false') //打印出It's false
}
//不应该使用
if(arr1){
console.log('It\'s true')
} //打印It's true
2、常见变量的判断
//1、为空字符串,打印false
var string1 = ''
if(string1){
console.log('It\'s true')
}else {
console.log('It\'s false')
}
//2、只申明 没有初始化,打印false
var string1
if(string1){
console.log('It\'s true')
}else {
console.log('It\'s false')
}
//3、没有申明,会直接报错
if(string1){
console.log('It\'s true')
}else {
console.log('It\'s false')
}
//4、string1 为一个对象的未申明属性,打印false
var a = {};
var string1 = a.abb;
if(string1){
console.log('It\'s true')
}else {
console.log('It\'s false')
}
但是在sessionStorage,和 localStorage的判断中却不一样,存一个未声明的属性居然为真
//1、未申明属性abb,打印结果为true
var a={}
sessionStorage.setItem('abb',a.abb);
console.log(sessionStorage.getItem('abb')) //打印undefined
console.log(typeof (sessionStorage.getItem('abb'))) //打印string
if(sessionStorage.getItem('abb')){ //打印true
console.log('It\'s true')
}else {
console.log('It\'s false')
}
//对于这种情况,可以判断不等于undefined 打印false
if(sessionStorage.getItem('abb') && sessionStorage.getItem('abb')!= 'undefined'){
console.log('It\'s true')
}else {
console.log('It\'s false')
}
//2、申明为空字符串,打印为false
var a={
abb:''
}
sessionStorage.setItem('abb',a.abb);
console.log(sessionStorage.getItem('abb')) //打印为空
console.log(typeof (sessionStorage.getItem('abb'))) //打印string
if(sessionStorage.getItem('abb')){ //打印false
console.log('It\'s true')
}else {
console.log('It\'s false')
}
//3、直接不存在,打印为false
console.log(sessionStorage.getItem('abb')) //null
console.log(typeof (sessionStorage.getItem('abb'))) // Object
if(sessionStorage.getItem('abb')){ //打印false
console.log('It\'s true')
}else {
console.log('It\'s false')
}
网友评论