alert(typeof(null)); //object
为什么alert(null instanceof Object); 为false?

解决方案 »

  1.   

    null是个特殊的Object类型的值 ,表示空引用的意思 。
    instanceof 表示某个变量是否是某个对象的实例 。我是这么理解的 。
    所以第二个为false 。
      

  2.   

    其实看似二者有些矛盾 
    但null返回object这个其实是最初JavaScript的实现的一个错误, 
    然后被ECMAScript沿用了,成为了现在的标准,不过我们把null可以理解为尚未存在的对象的占位符,这样就不矛盾了 ,虽然这是一种“辩解”。
    对于我们开发人员 还是要警惕这种“语言特性”。
      

  3.   

    这是由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”。在语义上也是可以理解的。