[英]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如果评价为以下。 我刚才包括重要的点。
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
还检查这个答案
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.