haizlin/fe-interview

[js] 第91天 请描述下null和undefined的区别是什么?这两者分别运用在什么场景?

haizhilin2013 opened this issue · 8 comments

第91天 请描述下null和undefined的区别是什么?这两者分别运用在什么场景?

null 变量不存在
underfined 变量未赋值

null 是“空值”,表示某个对象/资源并不存在;undefined 是指一个属性或变量还未赋值。
当一个变量本该存储一个对象,或一个函数应该返回一个对象,但这个对象却并不存在时,使用 null 来表示这种情况;
当一个属性或变量没有赋值,又或是一个函数没有返回值(如 C++ 里的 void),则它是 undefined;但通常我们不会将一个变量主动地赋为 undefined。

  • null为一个字面量,而undefined则为一个全局变量(全局对象的属性);
  • null指的是一个变量未指向任何对象,而undefined通常代表一个变量处于值未定义(未赋值)的状态;
    参考文档:null - JavaScript | MDN
  • 概念方面:
    • undefined:一般是简单数据类型,表示此处应该有个值,但是当前尚未赋值,
    • null:一般是复杂数据类型,表示不存在
  • 用途方面:
    • undefined: 返回执行之后无返回值/ 获取对象不存在的属性值
    • null: 原型链的最顶部的不存在对象

唔,那我来写点别的东西:

  • es6 的结构与函数默认值,只有 undefined 可设默认值,null 不能
  • +null0+undefinedNaN
  • JSON.stringify(undefined)undefinedJSON.stringify(null)'null'
  • JSON.stringify({a:undefined})'{}'JSON.stringify({a:null})'{"a":null}'
  • typeof null'object'typeof undefined'undefined'

undefined 的值是派生自 null 的,因此根据 ECMA-262 的规定 null == undefined // true。两者作为判断条件时都会返回 false,具体的区别是在含义上。

当一个变量未声明就被使用时,返回的是 undefined,可以理解为这个变量在内存中都不存在。
而一个变量声明了,只是暂时不需要赋值时应该赋 null 代表这个变量目前没有对应的值。在实际应用中也会把 null 作为一个初始值。

因此从语义上来讲,不应该给变量赋 undefined

Undefined 变量声明未赋值
Null 变量声明并赋值为null:初始赋值时,表明要赋值为对象,删除时,让对象成为垃圾对象

undefind是声明了该变量 未定义值
null表示的是空值,表示对象不存在,也没有指向任何对象。