了解JavaScript中的基元数据类型

Understanding primitive data types in JavaScript

本文关键字:数据类型 JavaScript 了解      更新时间:2023-09-26

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

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

为什么,如果基元数据类型不是对象,typeof null=="object"会为true?

typeof运算符基本上很古怪。这是规范中的文档。从该表中,您可以看到运算符的定义很简单,因此typeof null的结果是"对象"。

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

JavaScript基元类型实际上是而不是对象。它们有时看起来像对象,因为语言语义(特别是.[ ]运算符的语义)使得基元自动与相应类型的对象"装箱"。布尔基元、数字基元和字符串基元都是如此。对于null,没有这样的对应对象类型。

正因为如此,

var len = "some string".length;

有效,即使字符串基元没有"长度"属性。

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

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

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