之前在一个项目中需要对后台传过来的数据进行判断是否为空的处理我写了 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已经实例化;
所以上述判断皆为错误判断。于是我又改成了下面的方式;
if(a!==""){
alert(false);
}else{
alert(true);
}
我以为这样就已经非常OK啦在我push完代码时发现后期代码被进行了修改
if(a!=""){
alert(false);
}else{
alert(true);
}
难道上面的方法就不对吗?我对两方法都进行了输出结果都为 true为什么会被改成下面的写法呢?
于是我再次声明变量var a="1" if(a!=1){alert(a)} if(a!==1){alert(a)}
通过结果发现在a!===的时候才会弹出 1;
==和=== 与!=和!==是相对应的;
当我对数据进行===的判断时后台传过来的数据可能不是那么严格的会导致程序无法继续进行,所以被修改成了==判断。
新手求前辈多多指教!
原文:http://www.cnblogs.com/pandaer/p/5095499.html