null instanceof Object为什么是false

这是由Javascript规范规定的,Null和Object都是javascript中的数据类型。Null数据类型只有一个值:null。就像undefined数据类型只有一个值:undefined。问题出在typeof操作符的定义规范,如下:

11.4.3 The typeof Operator

The production UnaryExpression : typeof UnaryExpression is evaluated as follows:

1. Evaluate UnaryExpression.

2. If Type(Result(1)) is not Reference, go to step 4.

3. If GetBase(Result(1)) is null, return "undefined".

4. Call GetValue(Result(1)).

5. Return a string determined by Type(Result(4)) according to the following table:

Type Result

Undefined "undefined"

Null "object"

Boolean "boolean"

Number "number"

String "string"

Object (native and

doesn’t implement

[[Call]])

"object"

Object (native and

implements [[Call]])

"function"

Object (host) Implementation-dependent

可以看到,对于Null类型的值(只有null),规范就是定义返回"object"这个字符串。但是本质上Null和Object不是一个数据类型,null值并不是以Object为原型创建出来的。所以null instanceof Object是false。但从这里也可以看到,null确实是javascript中用来表示空引用的一个特殊值。使得它不是instanceof Ojbect,而typeof null是“object”。在语义上也是可以理解的。


这是摘自论坛上的回答,觉得很有道理,就摘录下来,感觉计算机就是这样子有些问题不能太专牛角尖,自己想半天想不通的结果人家规定就这样。哈哈。还是读书少。0.0

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

推荐阅读更多精彩内容

  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock阅读 3,409评论 2 36
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 我等你经过 我的身侧 树阴将你我视线阻隔 像两条河流没有交错 像彼岸花没有两个 ...
    枫芒阅读 190评论 0 2
  • 4月26日 星期三 闪电雷雨 今天下午放学,我在学校做作业等妈妈回来,到家和爸爸打球,等了一半,我就上来做作业...
    A叶瑞妹阅读 112评论 0 0