了解JavaScript中的原始数据类型

时间:2013-12-12 15:06:59

标签: javascript

在javascript中,typeof null ==“object”为true。 但null instanceOf Object为false。 直到我阅读了针对Web开发人员的专业JavaScript,我才对此感到困惑,

  

如果instanceOf与原始值一起使用,它将始终返回FALSE,因为基元不是对象。

为什么,如果原始数据类型不是对象,则typeof null ==“object”是否为真?

1 个答案:

答案 0 :(得分:2)

typeof运算符基本上是古怪的。 Here is the documentation in the spec。从该表中,您可以看到简单地定义了运算符,使typeof null的结果为“object”。

在JavaScript中,null实际上属于它自己的类型。这是一种特殊的原始类型。

JavaScript原始类型确实是不是对象。它们有时候似乎类似于对象,因为语言语义(特别是.[ ]运算符的语义)是这样的:基元自动“装箱”了对象相应的类型。布尔值,数字和字符串基元都是如此。对于null,没有相应的对象类型。

因此,

var len = "some string".length;

有效,即使字符串基元没有“length”属性。

还有一件事:在Object原型上使用“toString”函数作为typeof运算符的一种“改进”版本有点常见。

alert( Object.prototype.toString.call( null ) ); // [object Null]

该函数返回的字符串不是最方便处理的字符串,但它们确实提供了比typeof更精细的粒度。