抛开学术上关于定义的分歧,为什么 JavaScript 有或者没有 类型 那么重要?

对每一种 类型 和它的固有行为有一个正确的理解,对于理解如何正确和准确地转换两个不同类型的值来说是绝对必要的(参见第四章,强制转换)。几乎每一个被编写过的 JS 程序都需要以某种形式处理类型的强制转换,所以,你能负责任、有信心地这么做是很重要的。

如果你有一个 number42,但你想像一个 string 那样对待它,比如从位置 1 中将 "2" 作为一个字符抽取出来,那么显然你需要首先将值从 number(强制)转换成一个 string

这看起来十分简单。

但是这样的强制转换可能以许多不同的方式发生。其中有些方式是明确的,很容易推理的,和可靠的。但是如果你不小心,强制转换就可能以非常奇怪的,令人吃惊的方式发生。

对强制转换的困惑可能是 JavaScript 开发者所经历的最深刻的挫败感之一。它曾经总是因为如此 危险 而为人所诟病,被认为是一个语言设计上的缺陷而应当被回避。

带着对 JavaScript 类型的全面理解,我们将要阐明为什么强制转换的 坏名声 是言过其实的,而且是有些冤枉的 — 以此来反转你的视角,来看清强制转换的力量和用处。但首先,我们必须更好地把握值与类型。