== ===区别,利用!= !==判空。
之前在一个项目中需要对后台传过来的数据进行判断是否为空的处理我写了 if(data !== "")之后被公司前辈看见了给我改成了if(data!="");
于是做了下面的测试。
首先试了下==和===的区别
var a=1;
var b="1";
if(a==b){
alert(true)
}else{
alert(false)
}
// true
var a=1;
var b="1";
if(a==b){
alert(true)
}else{
alert(false)
}
// false
同样是=号为什么两个判断结果会出现差异那?
首先 a是number类型而b是string类型
进行==判断时数据会进行基本类型转换后再进行比较所以输出结果为true
而===号在进行两数比较时会严格按照连两变量的,数剧类型,number值,string,boolean,函数的引用进行判断。
这里要注意的是null和undefind
if(null==undefind)//true
if(null===undefind)//false
接下来说一下项目中的“判空”
在项目中我知道后台传过来的数据为"",需要做if进行“空”值判断于是我就写了下面判断语句
var a="";
if(a!=null){
alert(false);
}else{
alert(true);
}
//false
if(a!==null){
alert(false);
}else{
alert(true);
}
//flase
为什么两次返回都为false,判断都没有成功?
String str1 = null; str引用为空
String str2 = ""; str引用一个空串
也就是null没有分配空间,""分配了空间,因此str1还不是一个实例化的对象,而str2已经实例化;
所以上述判断皆为错误判断。于是我又改成了下面的方式就OK啦;
if(a!=""){
alert(false);
}else{
alert(true);
}