Javascript中对空的判断有许多形式,但是判断语句大多都不是很准确,原因是所谓的空具体指什么不是很清楚,诸如有空字符,有空对象,
有null、undefined、false 、0、“”、{}...........
下面就做一个简单的归纳总结,希望以后不要再犯错误
第一点:正确认识一个有意义的变量
所有需要使用的变量必须声明或赋值过,如果没有声明又没有赋值过就使用,会发生错误 :ReferenceError: obj is not defined
第二点:了解 typeof 的使用
(typeof obj) 的值是一个字符串,返回值
1. 'undefined' --- 这个值未定义;
2. 'boolean' --- 这个值是布尔值;
3. 'string' --- 这个值是字符串;
4. 'number' --- 这个值是数值;
5. 'object' --- 这个值是对象或null;
6. 'function' --- 这个值是函数。
第三点:if条件的判断
简单的if条件判断是:对 undefined、 null、 ""、false、0 的结果为false,否则为true
第四点: 逻辑运算的特殊性
首先关系运算的结果我们都很明确 true or false;很多语言中逻辑运算的结果也就是 true or false ,比如Java。但是,Js则不同,她在逻辑运算的结果上的返回值并不是单纯的true or false ,而是返回最后一个匹配的结果值。
比如: var obj = obj || {} ; 如果站在Java的语言角度看的话,obj最后是一个Boolean类型值,然而在Js中是指,如果obj有初值那么obj就是原来的值,否则就是一个空对象,所以其结果不一定是Boolean类型的值;这里强调 || 逻辑或运算 的执行规则:运算顺序从左至右,遵循短路运算,如果遇到 undefined、 null、 ""、false、0 中的任意一个则进行下一个值的判断,直到找到一个不为undefined、 null、 ""、false、0当中的值后退出抑或是最后一个值前的所有值都为undefined、 null、 ""、false、0,那么就直接返回最后一个值。
比如:var obj = true && obj ; 同样的返回不一定就是true,如果obj之前已经被初始化过,则返回obj的值。逻辑运算与同样遵循短路运算,从左至右如果遇到undefined、 null、 ""、false、0当中的任意一个都会直接返回false,然而如果在最后一个值的前面都不是undefined、 null、 ""、false、0当中之一则把最后一个值返回。
第五点:常用的判断
// 判断 undefined、 null、 ""、false、0
if(obj) // 对 undefined、 null、 ""、false、0 的结果为false,否则为true
if(!obj) //对 undefined、 null、 ""、false、0 的结果为true , 否则为false
// 判断 undefined
if(!obj && (typeof obj) =='undefined')
// 判断 null
if(!obj && (typeof obj) == 'object')
// 判断 0
if(!obj && obj==0)
// 判断false
if(!obj && (typeof obj) == 'boolean')
// 判断 “”
if(!obj && (typeof obj) == 'string')
// 判断 null undefiend false 但是要排除 0 和 ""
if(!obj && obj != 0 && (typeof obj) !='string')
// 判断 {} , 下面是jQuery中isEmptyObject 的源码,他仅仅对 typeof 'object' 而且 不为{}的对象返回true
isEmptyObject = function( obj ) {
var name;
for ( name in obj ) {
return false;
}
return true;
}
// 判断 null undefined
if( obj == null)
// 判断 null undefined {} 但要排除 false 0 “”
if( (obj == null) || ($.isEmptyObject(obj)) )