繁体   English   中英

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

[英]Javascript confusing syntax inconsistence for null, instanceof and typeof?

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

typeof null // returns "object"
null instanceof Object // returns false

那怎么样?

typeof undefined // return "undefined"
undefined instanceof undefined 
// ERROR:  Uncaught TypeError: Expecting a function in instanceof check, 
//         but got undefined

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

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

“x instanceof y”

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

编辑

如果您能够解释其背后的不同意图和其他语法和返回值的类型,那将非常感激。

null和undefined之间的区别

typeof null        // object (bug in ECMAScript, should be null)
typeof undefined   // undefined
null === undefined // false
null  == undefined // true

REF

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

这只是设计决策,可能是人为的或奇怪的。 按照typeof UnaryExpression如果评价为以下。 我刚才包括重要的点。

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

Table 20:
╔═════════════╦══════════╗
║ Type of val ║  Result  ║
╠═════════════╬══════════╣
║ null        ║ "object" ║
╚═════════════╩══════════╝

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

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

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

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

这是ECMAScript的常见错误。

null不是一个object ,它是一个原始值。(所以你不能修改它就像添加属性一样)

typeof null应该返回null

typeof null // object(ECMAScript中的bug,应为null)

typeof undefined // undefined

null === undefined // false

null == undefined // true

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null

EDITED

虽然看不到它

由brendan在3周前更改

你知道,这一切都是因为1995年5月初的匆忙而导致的,这导致了null和对象类型共享的类型标记表示的泄漏。 但是null意味着“没有对象”,所以它没有引起骚动,直到在Netscape 2中修复为时已晚,之后我们不愿意“修复”它并“破坏网络”。 这个论点现在只适用于网络人口的程度。 我们还有其他鱼类可以炒。 这个已经被吞噬了。 让我们不要为ES4更改typeof null并处理更重要的问题。

http://web.archive.org/web/20071110193102/http://bugs.ecmascript.org/ticket/250

还检查这个答案

为什么null是一个对象,null和undefined之间有什么区别?

instanceof更吸引人,但你检查instaceof undefined抛出异常,因为undefined不是任何单一类型的对象名,它可能是也可能不是JavaScript Object sub method 因为undefined类型为null (Null Type)。

typeof undefined // return "undefined"
undefined instanceof Object // return False 

你应该检查undefined是instaceof JS对象,给它一个不是它不是对象。 它给出了一个boolean结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM