本文共 3097 字,大约阅读时间需要 10 分钟。
目录
因为获取到数据的不确定性,常常会导致一些异常情况,使得页面报错,往往要兼容这些异常数据,那么前端的包容性就很重要了。所以这里我对一些异常的数据进行了整理。
const datas = [undefined,null,0,'',false,[],{}] let param1 = '类型'let param2 = 'JSON字符串'let param3 = '转为数字类型' let param4 = '非'let param5 = '与非比较'console.log(datas) // [undefined, null, 0, "", false, Array(0), {…}]_.map(datas || [], data=>{ param1+=`${typeof (data)},` param2+=`${JSON.stringify(data)},` param3+=`${Number(data)},` param4+=`${!data},` param5+=`${data==!data},` })console.log(param1) // 类型 undefined,object,number,string,boolean,object,object,console.log(param2) // JSON字符串undefined,null,0,"",false,[],{},console.log(param3) // 转为数字类型NaN,0,0,0,0,0,NaN,console.log(param4) // 非true,true,true,true,true,false,false,console.log(param5) // 与非比较false,false,false,false,false,true,false,
这里返回的每一个JSON字符串都是它本身的JSON字符,唯一的,单独判断的时候,我经常采用这种方法。
这里undefined和空对象{}是NAN,而空数组为0。
console.log(a == true) // falseconsole.log([] == []) // falseconsole.log(new Array(1) == false)) // true
引用类型转换了Boolean均为true,所以空数组和空对象进行布尔转换时均转换为true。
对于空数组[]而言,等式右边的空数组被转换为了一个布尔值,空数组是true,取反是false;数组左边与布尔值进行比较(任意值与布尔值进行比较的时候都会转换为数值进行比较),需要将二者都转换为数数字,左侧空数组转换为0, 右侧相当于false转换为数字,也是0, 所以二者相等。但是如果是全等比较则不相等,因为不会发生类型转换。
和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。
let a =nullJSON.stringify(a)=='null' // true
关系运算符 和 相等运算符 并不是一个类别的.
关系运算符,在设计上总是需要运算元尝试转为一个number,而相等运算符在设计上,则没有这方面的考虑.
null > 0 // null 尝试转型为number , 则为0 . 所以结果为 false, null >= 0 // null 尝试转为number ,则为0 , 结果为 true. null == 0 // null在设计上,在此处不尝试转型. 所以 结果为false.
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。0与一些虚值的比较:
console.log(0 == ''); //trueconsole.log(0 == false); //trueconsole.log(0==[]); //true console.log(0==NaN);//falseconsole.log(0==undefined);//falseconsole.log(0==null);//false console.log(0=={});//false console.log(null == undefined); //trueconsole.log(false == null); //falseconsole.log(false == undefined);//false
“”与一些虚值的比较:
console.log('' == false); //trueconsole.log(''==[]);//trueconsole.log(''==undefined);//falseconsole.log(''==null);//falseconsole.log(''==NAN);//falseconsole.log(''=={});//false
var tmp = null; if (!tmp) { alert("null or undefined or NaN"); }
提示:一般不那么区分就使用这个足够。
--------------------- 作者:weixin_33814685 来源:CSDN 原文:https://blog.csdn.net/weixin_33814685/article/details/87515835 版权声明:本文为作者原创文章,转载请附上博文链接!