Open sworlife opened 3 years ago
编程语言的基本概念
学习了编程语言的基本概念后,接下来开始深入了解 Javascript。
那就从值与类型开始!
JavaScript 作为动态语言,其变量只是值的容器,变量没有类型。那么,JavaScript 中的值有哪些类型?
有了这些类型之后,就涉及到类型转换,就是说从一种类型转换为另一种类型。
ToString
规范9.8定义了抽象操作ToString,它负责处理非字符串到字符串的强制类型转换
ToNumber
规范9.3定义了抽象操作 ToNumber,将非数字转换为数字
ToBoolean
规范9.2
ToPrimitive
规范9.1
以上便是规范种定义的4种抽象值操作,表中分别指出了如何进行类型转换。
有了这些转换规范,便很容易理解:宽松相等(==)和严格相等(===)的判断依据了
总结下: == 比较的过程中,都是优先判断其左右两边的数据类型,强制类型转换就发生在两边数据类型不一致的情况下。在Undefined,Null,String,Number,Boolean,Object的6种类型中,两种类型中出现了Undefined或者null,都能够直接得出结果,不需要数据类型转换。那么剩下的4中类型进行组合。 遇到Boolean,将其ToNumber,遇到Object,将其ToPrimitive(将得到String,或者Number),最终都会转化为String和Number之间的组合进行比较。 理解了这些,== 的强制类型转换将不再是问题 对照下表,看看还有不能理解的么?
编程语言的基本概念
学习了编程语言的基本概念后,接下来开始深入了解 Javascript。
那就从值与类型开始!
值与类型
JavaScript 作为动态语言,其变量只是值的容器,变量没有类型。那么,JavaScript 中的值有哪些类型?
有了这些类型之后,就涉及到类型转换,就是说从一种类型转换为另一种类型。
ToString
ToNumber
ToBoolean
ToPrimitive
以上便是规范种定义的4种抽象值操作,表中分别指出了如何进行类型转换。
有了这些转换规范,便很容易理解:宽松相等(==)和严格相等(===)的判断依据了
总结下: == 比较的过程中,都是优先判断其左右两边的数据类型,强制类型转换就发生在两边数据类型不一致的情况下。在Undefined,Null,String,Number,Boolean,Object的6种类型中,两种类型中出现了Undefined或者null,都能够直接得出结果,不需要数据类型转换。那么剩下的4中类型进行组合。 遇到Boolean,将其ToNumber,遇到Object,将其ToPrimitive(将得到String,或者Number),最终都会转化为String和Number之间的组合进行比较。 理解了这些,== 的强制类型转换将不再是问题 对照下表,看看还有不能理解的么?