我正在阅读“专业Web开发者Javascript”第4章,它告诉我五种类型的原语是:未定义,null,布尔,数字和字符串。
如果null是一个原语,为什么typeof(null)返回“object”?
这是不是意味着null是通过引用传递的(我假设这里所有的对象都是通过引用传递的),因此使它不是一个原语?
我正在阅读“专业Web开发者Javascript”第4章,它告诉我五种类型的原语是:未定义,null,布尔,数字和字符串。
如果null是一个原语,为什么typeof(null)返回“object”?
这是不是意味着null是通过引用传递的(我假设这里所有的对象都是通过引用传递的),因此使它不是一个原语?
当前回答
来自YDKJS这本书
这是JS中一个长期存在的错误,但它可能永远不会消失 待修复。Web上有太多的代码依赖于这个bug,因此 修复它会导致更多的bug !
其他回答
来自YDKJS这本书
这是JS中一个长期存在的错误,但它可能永远不会消失 待修复。Web上有太多的代码依赖于这个bug,因此 修复它会导致更多的bug !
ECMAScript规范标识了这些语言数据类型:
6.1.1未定义类型 6.1.2 Null类型 6.1.3布尔类型 6.1.4字符串类型 6.1.5符号类型 6.1.6数字类型 6.1.6.1号码类型 6.1.6.2 BigInt类型 6.1.7对象类型
由于历史原因,typeof操作符在以下两种情况下与此分类不一致:
Typeof null == "object":这是不幸的,但我们必须忍受。 函数对象的typeof值为"function",即使根据规范,它的数据类型为object。
另一个操作符——instanceof——可以用来知道一个对象是否继承了某个原型。例如,[1,2]instanceof Array将求值为true。
确定一个值是否为对象的一种方法是使用object函数:
if (Object(value) === value) // then it is an object; i.e., a non-primitive
如果null是一个原语,为什么typeof(null)返回“object”?
简而言之:它是ECMAScript中的bug,类型应该是null
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null
在JavaScript中,typeof null是'object',这错误地表明null是一个对象。这是一个错误,不幸的是无法修复,因为它会破坏现有的代码。
在JavaScript中,null是“nothing”。它应该是不存在的东西。不幸的是,在JavaScript中,null的数据类型是一个对象。你可以认为typeof null是一个对象是JavaScript的错误。它应该是空的。