JavaScript类型转换(一)——概述

这是JavaScript类型转换系列文章的第一篇,讲述问题产生的背景和要达到的目标。

概述

众所周知,因为历史原因,JavaScript被设计得很“潦草”,为了便于使用它弱化了类型的概念、代劳了类型转换、隐藏了类型转换的细节。

本文试图把这些相关的技术细节尽可能都罗列总结出来,避免阅读前现代代码时产生疑惑,也督促自己面向现代化语法规范编程。

这些内容很多已经不属于强势知识,应该避免利用这些知识给自己的代码读者造成困扰。现代化的语法规范中,已经有对于这些问题的修补,比如全等===运算符的出现,比如隐式类型转换受限的新类BigIntSymbol。未来,拥抱强类型的TypeScript可能是最终目标。

我们一起来看看类型转换遇到的困扰。首先梳理一下JavaScript的类型。

JavaScript有7个基本类型,分别是: numberstringbooleanundefinednullBigIntSymbol。其中前3项是最基本的数据类型,后2项是新增的数据类型。

JavaScript引用类型有:NumberStringBooleanObjectArrayDateRegExpFunction。前3项是包装类型。用户的自定义对象也是引用类型的。

类型转换通常发生在:3个基本类型(numberstringboolean)之间、引用类型向3个基本类型。

掌握了类型知识后,进行类型转换应该怎么做?

本系列文章第二篇会介绍从一个类型向另一个类型转换的规则,搞定How

类型转换的难点并不是如何转换,而是隐式类型转换。不是程序员有意为之但实际发生了的类型转换就是隐形类型转换,在JavaScript开发实践中简直不要太常见。这些转换细节会在本系列文章的第三篇介绍,明确何时发生转换和向哪个方向转换的问题,搞定Whenwhere

本系列文章的最后一篇会归纳总结上述内容,最后提供一套测试题,检验读者的学习效果。