背景
    某天看了一边文章,才发现还是需要记录一下的,我写的都比较零散,但是确实需要注意的,某一句可能就是你不知道的哦!

    NaN永远不会等于另外的数据,包括它自己!

    1. // 这是伪代码,可以直接放浏览器打印尝试
    2. NaN == NaN // false
    3. 2 < NaN // false
    4. 2 >= NaN // false

    undefined == null,它俩相等

    1. undefined == null // true

    Number方法对于undefined和Null的区别

    1. Number(undefined) // NaN
    2. Number(null) // 0

    undefined和null没有toString方法

    1. undefined.toString() // 报错
    2. null.toString() // 报错

    undefined和null不能用于比较逻辑,但是可以进行强制类型转换

    1. undefined == 0 // false
    2. null == 0 // false

    let定义在全局上下文,不能使用window.xx访问,但是var定义的可以

    1. var a = 1;
    2. console.log(windw.a) // 1
    3. let b = 2;
    4. console.log(window.b) // 报错

    let没有变量提升,所以需要使用之前先声明

    1. console.log(s); // undefined
    2. var s = 1;
    3. console.log(ss); // 报错
    4. let ss = 1;

    let没有定义的时候,唯一可以使用的就是typeof这个api
    注意:这种方式只能是放到js里面运行可以,但是直接在浏览器控制台运行,则会报错
    image.png

    1. console.log(typeof a) // undefined

    在同一个作用域,如果let和var定义了同一个变量,则会报错

    1. let s = 1
    2. var s = 1 // 报错
    3. var a = 1
    4. let a = 1 // 报错

    typeof判断类型

    1. typeof '' // string
    2. typeof null // object
    3. typeof 1 // number
    4. typeof function // funtion
    5. // object
    6. typeof undefined // undefined
    7. typeof true // boolean
    8. typeof NaN // number
    9. typeof unknownVariable(未定义的变量) // undefined

    Boolean方法进行转换

    1. Boolean('') // false
    2. Boolean(1) // true
    3. Boolean(0) // false
    4. Boolean('0') // false
    5. Boolean(null) // false
    6. Boolean({}) // true
    7. Boolean(undefined) // false
    8. Boolean(NaN) // false

    Number转换

    1. Number([]) // 0
    2. Number({}) // NaN
    3. Number([1]) // 1
    4. Number([1, 'a']) // NaN

    上面的原因是:复杂数据类型转换,先使用valueOf,如果是原始数据类型则停止,如果不是原始数据类型,则继续使用toString方法进行转换,可以参考:参考文档

    1. [].valueOf() // []
    2. [].toString() // ''
    3. Number('') == Number([]) // true
    4. [1].valueOf() // [1]
    5. [1].toString() // '1'
    6. Number('1') == Number([1]) // true
    7. [1, 'a'].valueOf() // [1, 'a']
    8. [1, 'a'].toString() // '1,a'
    9. Number('1,a') // NaN