null和undefined的区别

在许多计算机语言中,有且仅有一个表示“无”的值,如C语言的NULL,Java的null,Python的None。
然而JS中竟然有两个表示“无”的值:null和undefined,这是为什么?它们之间又有什么区别?


undefined与null
  • null

空的对象引用。
1995年JavaScript诞生之初,像Java一样,只设置了null表示“什么都没有”,因此和Java一样,
(1) null被当成一个对象;
(2) null可以自动转化为0;

typeof null; //返回值为 object
Number(null); //返回值为 0

  • undefined

后来JS的设计者Brendan Eich认为“无”的值最好不是对象,且由于null自动转化为0,因此造成错误不易被发现。
因此,Brendan Eich又设计了一个undefined,表示“缺少值”,即此处应有一个值,但还没有定义;转为数值时为NaN(非数字值的特殊值)
Number(undefined); //NaN
5+undefined; //Nan
典型的出现场景如下:
(1)变量被声明了,但没有赋值;
(2) 调用函数时,应提供的参数未提供
(3) 对象没的属性未定义;
(4) 对象没有返回值,则默认返回undefined

var i;
i; //undefined

  function f(x) {
      console.log(X);
  }
  f(); //undefined

  var o = new Object();
  o.name; //undefined

  var x = f();
  x;  //undefined

(完)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容