0
点赞
收藏
分享

微信扫一扫

null和undefined真的就没区别了?

大雁f 2022-03-11 阅读 131

前言

一个又一个三四年经验的面试者,当被问到 'null 和undefined'区别时, 大都简单说两句.当我告诉他们答案时,有些面试者不屑的说,这影响编程吗?当然不影响写代码,只是影响优化.大厂和高工资都和你无缘!


一 undefined是什么?

  •  和Number,String,Bool一样它是一种数据类型,可以使用typeof进行检测.
  let str = '小甜甜';
  let age;   //声明,未赋值

    console.log(typeof str);  // string
    console.log(typeof age);  // undefined
  • 声明变量但没有初始化时,就会自动赋特殊值undefined.
    let num;
    console.log(num == undefined);  // true

    上面例子中变量num声明未初始化,而在和undefined比较时,两者相等.
  • 包含undefined值的变量和和未定义变量是有区别的.但是两个变量都不能进行任何真正的操作.
    let num;
    console.log(num);  //

    console.log(typeof mes); //   undefined

    console.log(mes); // 保存

 // 对于未声明的变量,直接输出会报错,但执行typeof则会输出undefined
  • 声明变量时,如果能预测下方赋值的类型,最好为其赋同等类型的空置,而不是去使用undefined.
    // 如果下文赋值字符串类型,可以给空字符串
    let str = '';

    // 如果下文是数字,可以提前给0
    let num = 0;

    // 提前设定好类型,有利于提高js解释器执行效率
  • 在if判断中,undefined会转化为false
    let mes; // 变量声明了,但是值为undefined
    if (mes) {
      // 不执行
    }
    if (!mes) {
      // 执行
    }

 二 null是什么

  • null是个特殊值,逻辑上讲nul是个空对象指针.
 let info = null;
    console.log(typeof info); // object  从测试结果看,null本质上也是个空对象

  • 当我们不在使用一个变量时,可以赋值为null,解除占用,下次垃圾回收程序就收回值所占用的空间.
    let div = document.querySelectorAll('.goods');
    div.forEach(() => {
      // ... 处理程序
    })

    //使用完毕, 赋值为null
    div = null;

总结

  1.  增加undefined的目的就是为了正式明确空对象指针(null)和未初始化变量的区别.
  2. undefined是自然的一种值,在各种情况下会自动产生. (函数无返回值,访问的属性不存在等).
  3.   null则是需要手动设置的一种值,表示后续要赋值为空对象.或者说要解除引用.
  4. 两者都是无效值,都转化为booll值false.      
举报

相关推荐

0 条评论