FE-DSHUI / DSHUI

前端王者小分队读书会
4 stars 1 forks source link

《你不知道的JavaScript 下卷》——2020-01-29 #29

Open sworlife opened 3 years ago

sworlife commented 3 years ago

编程语言的基本概念

学习了编程语言的基本概念后,接下来开始深入了解 Javascript。

那就从值与类型开始!

值与类型

JavaScript 作为动态语言,其变量只是值的容器,变量没有类型。那么,JavaScript 中的值有哪些类型?

有了这些类型之后,就涉及到类型转换,就是说从一种类型转换为另一种类型。

ToString

规范9.8定义了抽象操作ToString,它负责处理非字符串到字符串的强制类型转换

image

ToNumber

规范9.3定义了抽象操作 ToNumber,将非数字转换为数字

image

ToBoolean

规范9.2

image

ToPrimitive

规范9.1

image

以上便是规范种定义的4种抽象值操作,表中分别指出了如何进行类型转换。

有了这些转换规范,便很容易理解:宽松相等(==)和严格相等(===)的判断依据了

image

总结下: == 比较的过程中,都是优先判断其左右两边的数据类型,强制类型转换就发生在两边数据类型不一致的情况下。在Undefined,Null,String,Number,Boolean,Object的6种类型中,两种类型中出现了Undefined或者null,都能够直接得出结果,不需要数据类型转换。那么剩下的4中类型进行组合。 遇到Boolean,将其ToNumber,遇到Object,将其ToPrimitive(将得到String,或者Number),最终都会转化为String和Number之间的组合进行比较。 理解了这些,== 的强制类型转换将不再是问题 对照下表,看看还有不能理解的么? image