返回介绍

第一部分 类型和语法

第二部分 异步和性能

1.2 内置类型

发布于 2023-05-24 16:38:21 字数 1836 浏览 0 评论 0 收藏 0

JavaScript 有七种内置类型:

· 空值(null )

· 未定义(undefined )

· 布尔值(boolean )

· 数字(number )

· 字符串(string )

· 对象(object )

· 符号(symbol ,ES6 中新增)

除对象之外,其他统称为“基本类型”。

我们可以用 typeof 运算符来查看值的类型,它返回的是类型的字符串值。有意思的是,这七种类型和它们的字符串值并不一一对应:

typeof undefined   === "undefined"; // true
typeof true      === "boolean";   // true
typeof 42      === "number";  // true
typeof "42"      === "string";  // true
typeof { life: 42 }  === "object";  // true

// ES6中新加入的类型
typeof Symbol()    === "symbol";  // true

以上六种类型均有同名的字符串值与之对应。符号是 ES6 中新加入的类型,我们将在第 3 章中介绍。

你可能注意到 null 类型不在此列。它比较特殊 ,typeof 对它的处理有问题:

typeof null === "object"; // true

正确的返回结果应该是 "null" ,但这个 bug 由来已久,在 JavaScript 中已经存在了将近二十年,也许永远也不会修复,因为这牵涉到太多的 Web 系统,“修复”它会产生 更多的 bug,令许多系统无法正常工作。

我们需要使用复合条件来检测 null 值的类型:

var a = null;

(!a && typeof a === "object"); // true

null 是基本类型中唯一的一个“假值”(falsy 或者 false-like,参见第 4 章)类型,typeof 对它的返回值为 "object" 。

还有一种情况:

typeof function a(){ /* .. */ } === "function"; // true

这样看来,function (函数)也是 JavaScript 的一个内置类型。然而查阅规范就会知道,它实际上是 object 的一个“子类型”。具体来说,函数是“可调用对象”,它有一个内部属性 [[Call]] ,该属性使其可以被调用。

函数不仅是对象,还可以拥有属性。例如:

function a(b,c) {
  /* .. */
}

函数对象的 length 属性是其声明的参数的个数:

a.length; // 2

因为该函数声明了两个命名参数,b 和 c ,所以其 length 值为 2 。

再来看看数组。JavaScript 支持数组,那么它是否也是一个特殊类型?

typeof [1,2,3] === "object"; // true

不,数组也是对象。确切地说,它也是 object 的一个“子类型”(参见第 3 章),数组的元素按数字顺序来进行索引(而非普通像对象那样通过字符串键值),其 length 属性是元素的个数。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文