JavaScript是一门类型系统灵活的语言,尽管相较于Java、C#等强类型语言,它的弱类型使用起来似乎更加便利,但由于其极高的自由度,也会导致一些令人摸不着头脑的类型转换行为。
举个例子,尽管我们都知道一个包含内容的字符串会被认为是“真值 Truthy”(因为除了空字符串之外任何字符串在JS里都被认为真值),但当你做如下比较的时候,你会得到一个惊人的结果:
const a = "18";
const b = true;
a == b // false
什么鬼,一个被通常理解成真值的值,竟然无法与布尔真值松散相等?
为了能拨开JavaScript类型的迷雾,让头铁的我们一点一点理顺JavaScript整个类型系统的工作逻辑。
读者可以根据自己对JS类型系统的掌握程度,选择性的阅读这篇博客