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
答案 0 :(得分:3)
这只是设计决定,可能是人为的或奇怪的。根据{{1}} UnaryExpression ,如果按以下方式评估。我只是把重点包括在内。
ECMA Spec: 根据表20返回由
Type(val)
确定的字符串。
typeof
所以,我们无能为力。它是status-by-design。但返回Table 20:
╔═════════════╦══════════╗
║ Type of val ║ Result ║
╠═════════════╬══════════╣
║ null ║ "object" ║
╚═════════════╩══════════╝
是正确的,因为false
有一个名为Null type
的单独类型
显然,
null
唯一值为空值的类型
Null type:
并不是Object的一个实例,因为它已经拥有了自己的类型。只是null
运算符返回typeof
。它与javascript的设计有关。
为什么会这样?将不得不问Brendan Eich(Javascript的创始人)。
答案 1 :(得分:0)
这是ECMAScript的常见错误。
null
不是object
,它是一个原始值。(所以你不能修改它就像添加属性一样)
typeof null
应该返回null
typeof null // object(ECMAScript中的错误,应为null)
typeof undefined // undefined
null === undefined // false
null == undefined // true
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null
<强> EDITED 强>
无法看到
3周前由brendan改变
你知道,这一切都是因为 在1995年5月初匆忙,导致类型标签泄漏 由null和对象类型共享的表示。但是null意味着&#34;不 对象&#34;,所以它没有引起骚动,直到修复为时已晚 Netscape 2,之后我们不愿意&#34;修复&#34;它和&#34;打破了 幅&#34 ;.这个论点现在只适用于网络人口的程度。 我们还有其他鱼类可以炒。这个已经被吞噬了。 让我们不要改变ES4的typeof null并处理更重要的问题。
http://web.archive.org/web/20071110193102/http://bugs.ecmascript.org/ticket/250
也请查看此答案
Why is null an object and what's the difference between null and undefined?
答案 2 :(得分:0)
instanceof
更有吸引力,但是您检查了instaceof undefined
抛出异常,因为undefined不是任何单一类型的对象名称,它可能是也可能不是 sub method
JavaScript Object
。因为undefined
类型为 null
(空类型)。
typeof undefined // return "undefined"
undefined instanceof Object // return False
你应该检查undefined是instaceof
JS对象,给它一个不是它不是对象。它会提供 boolean
结果。