Javascript 混淆 null、instanceof 和 typeof 的语法不一致?

noo*_*oob 2 javascript oop null object

var obj = {};
typeof obj; // returns "object"
obj instanceof Object // return true

typeof null // returns "object"
null instanceof Object // returns false
Run Code Online (Sandbox Code Playgroud)

怎么样

typeof undefined // return "undefined"
undefined instanceof undefined 
// ERROR:  Uncaught TypeError: Expecting a function in instanceof check, 
//         but got undefined
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我已经阅读了很多关于 SO 的相关主题,但仍然无法理解。

理解'typeof'会返回一个字符串,所以它几乎反映了Javascript中的规则。(例如,null是一个对象......很好......)但是为什么“null instanceof Object”返回false?

“x 实例的 y”

这是否意味着“x”必须由“y”构造函数创建?而对于 null,情况并非如此?

编辑

如果您能解释除语法和返回值之外的 instanceof 和 typeof 背后的不同意图,我们将不胜感激。

null 和 undefined 的区别

typeof null        // object (bug in ECMAScript, should be null)
typeof undefined   // undefined
null === undefined // false
null  == undefined // true
Run Code Online (Sandbox Code Playgroud)

参考文献

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

Ami*_*oki 5

这只是设计决策可能是人为的或奇怪的。根据一元typeof 表达式,如果评估如下。我刚刚包括了重要的观点。

ECMA 规范: 返回Type(val)根据表 20确定的字符串。

Table 20:
??????????????????????????
? Type of val ?  Result  ?
??????????????????????????
? null        ? "object" ?
??????????????????????????
Run Code Online (Sandbox Code Playgroud)

所以,我们对此无能为力。它是。但是返回false是正确的,因为null调用有一个单独的类型Null type

Null type: 唯一值为空值的类型

null显然,它不是 Object 的实例,因为它有自己的类型。只是typeof运算符返回"object"。这与javascript的设计有关。

为什么会这样?将不得不问 Brendan Eich(Javascript 的创始人)。