undefined和null

在JS里,undefined和null都被用来表示 “无”

undefined==null

 

其主要是有历史原因的:

  null像在Java里,被当成一个对象

  typeof null == object

  但是如果数据不匹配,null会隐式自动转换为0     Number(null) == 0

  如果只有null的话,自动转为0也不容易被发现;且并不希望表示无的值为一个对象。所以又设计了一个undefined

 

  Number(undefined) == NaN

 

目前的区别:

  null表示"没有对象",即该处不应该有值。

    (1) 作为函数的参数,表示该函数的参数不是对象。

    (2) 作为对象原型链的终点

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

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

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

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

    (4)函数没有返回值时,默认返回undefined。

 

 

引用:https://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

 

引用评论:

typeof null 结果是 ”object“ 更像是一个设计失误

因为 typeof null === "object" 而认为 null 语义是表示空对象是个不谨慎的猜测,感觉像是先射箭后画靶一般。

简单的反例:在强类型数据交换协议 odata(http://www.odata.org/)的 JSON 格式中,即使一个成员定义为特定类型(比如string),也可以设置其值为 null 来表示这个值是空值,这可不是表示这个成员是空对象,只是说值为空而已(和空字符串、0、false有所区别)。

而 typeof null === "object" 更可能是一个设计失误,所以在 harmony 中有提议将这个返回值修正为 null :

http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null

当然该提议因为会造成大量旧 Javascript 脚本出现问题而被否决了……

posted @ 2022-03-24 19:48  Jacky02  阅读(89)  评论(0编辑  收藏  举报