美文网首页数据类型
js中null,undefined,false,0,'&

js中null,undefined,false,0,'&

作者: 乖乖果效36 | 来源:发表于2018-09-12 15:27 被阅读215次

    因为获取到数据的不确定性,常常会导致一些异常情况,使得页面报错,往往要兼容这些异常数据,那么前端的包容性就很重要了。所以这里我对一些异常的数据进行了整理。

    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,
    

    1.数据类型

    • 数据的类型包括原始类型(基本类型)和引用类型。
    • 原始类型(基本类型)包括字符串、数字、布尔、Null、Undefined,按值访问,可以操作保存在变量中实际的值。原始类型汇总中null和undefined比较特殊。
    • 引用类型包括数组、对象,引用类型的值是保存在内存中的对象。
    • 比较特殊的是typeof null返回“object”。
      历史原因,规范尝试修改typeof null返回“null”修改完大量网站无法访问,为了兼容,或者说历史原因返回"object"。
      typeof对基本类型和函数对象很方便,但是其他类型就没办法了。
      判断一个对象是不是数组?用typeof返回“object”。对对象的判断常用instanceof。

    2.JSON字符串

    这里返回的每一个JSON字符串都是它本身的JSON字符,唯一的,单独判断的时候,我经常采用这种方法。

    3.数字类型

    这里undefined和空对象{}是NAN,而空数组为0。

    • 但是,将空数组与true进行比较时,结果是false。因为,任意值与布尔值进行比较的时候都会转换为数值进行比较(我一直以为所有的比较都会转化为简单的类型比较,这里比较特殊?),布尔值true为1, false为0,空数组转换为数字的话是0,所以二者并不相等。
    • 如果将两个数组进行比较, 返回值是false, 因为二者是不同的两个对象。
    • new Array(1)同样因为虽然长度为1,但值为undefined,转换为数字仍未0。
    console.log(a == true) //  false
    console.log([] == [])  //  false
    console.log(new Array(1) == false))  // true
    

    4.非的布尔值

    引用类型转换了Boolean均为true,所以空数组和空对象进行布尔转换时均转换为true。

    5.与非比较

    对于空数组[]而言,等式右边的空数组被转换为了一个布尔值,空数组是true,取反是false;数组左边与布尔值进行比较(任意值与布尔值进行比较的时候都会转换为数值进行比较),需要将二者都转换为数数字,左侧空数组转换为0, 右侧相当于false转换为数字,也是0, 所以二者相等。但是如果是全等比较则不相等,因为不会发生类型转换。

    一、单独判断

    1.null

    和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。

    let a =null
    JSON.stringify(a)=='null'  // true
    
    1. 关系运算符 和 相等运算符 并不是一个类别的.

    2. 关系运算符,在设计上总是需要运算元尝试转为一个number,而相等运算符在设计上,则没有这方面的考虑.

    null > 0 //  null 尝试转型为number , 则为0 . 所以结果为 false, 
    null >= 0 //  null 尝试转为number ,则为0 , 结果为 true. 
    null == 0 // null在设计上,在此处不尝试转型. 所以 结果为false.
    

    2.undefined

    undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:

    (1)变量被声明了,但没有赋值时,就等于undefined。

    (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

    (3)对象没有赋值的属性,该属性的值为undefined。

    (4)函数没有返回值时,默认返回undefined。
    null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

    3.0

    0与一些虚值的比较:

    console.log(0 == ''); //true
    console.log(0 == false); //true
    console.log(0==[]); //true 
    console.log(0==NaN);//false
    console.log(0==undefined);//false
    console.log(0==null);//false 
    console.log(0=={});//false 
    
    console.log(null == undefined); //true
    console.log(false == null); //false
    console.log(false == undefined);//false
    
    

    4.“”

    “”与一些虚值的比较:

    console.log('' == false); //true
    console.log(''==[]);//true
    console.log(''==undefined);//false
    console.log(''==null);//false
    console.log(''==NAN);//false
    console.log(''=={});//false
    
    

    5.判断undefined、null与NaN:

    var tmp = null; 
    if (!tmp) 
    { 
    alert("null or undefined or NaN"); 
    }
    

    提示:一般不那么区分就使用这个足够。

    相关文章

      网友评论

        本文标题:js中null,undefined,false,0,'&

        本文链接:https://www.haomeiwen.com/subject/ukykiftx.html