首页 理论教育零基础JavaScript类型转换规则

零基础JavaScript类型转换规则

【摘要】:当两个操作数类型不一致,要判断两者是否相等时,需要按照以下规则对数字、字符串、布尔值、对象、null、undefined进行转换之后再判断:1.null与除了undefined之外的任意值均不相等(!图4.3.2类型转换比较对象和原始值稍微有点复杂,有一个函数调用过程。图4.3.3比较对象与原始值在获取原始值的过程中,函数valueOf()先执行,因此看到先输出valueOf函数的提示语句,再执行toString()。

JavaScript支持比较两个类型不一致的操作数。当两个操作数类型不一致,要判断两者是否相等时,需要按照以下规则对数字、字符串、布尔值、对象、null、undefined进行转换之后再判断:

1.null与除了undefined之外的任意值均不相等(!=),undefined与除了null之外的任意值均不相等。

2.null===null为true,与其他值进行全等比较均为false。

3.undefined===undefined为true,与其他值进行全等比较均为false。

4.非数字NaN与任意值均不相等(!=),NaN不等于NaN为true,NaN参与比较运算的结果均为false。

5.比较数字和字符串时,字符串会转换为数值再进行比较,比如'1'==1 为true,'1.00'==1 也为true。

6.比较布尔值和非布尔值时,将true转换为1,false转换为0,再应用其他规则。比如,true=='1.00' 先将true转换为1、'1.00'转换为1再进行比较,因此为true;false=='000' 将false转换为0、'000'转换为0再进行比较,因此也为true。

7.比较对象与数字、字符串时,尝试用该对象的原始值(Primitive Value)进行比较,即尝试调用对象的valueOf()和toString()获取原始值,再进行比较。

8.比较两个对象时,仅比较两个操作数的引用是否相同。

NaN是JavaScript的一个特殊数值常量,表示非数字;typeof NaN返回“number”。

此处的对象包括数组、函数和其他内置、自定义对象。

4.3.2.html对数字、字符串、布尔值进行比较,如下所示。

动手写4.3.2

执行4.3.2.html,输出比较结果到网页,如下图所示。(www.chuimin.cn)

图4.3.2 类型转换

比较对象和原始值(数字、字符串)稍微有点复杂,有一个函数调用过程。一般情况下,JavaScript的对象从关系链的最顶层继承了toString()和valueOf()两个方法,为对象设置这两个方法,可以覆盖默认的toString()、valueOf()。

4.3.3.html为对象设置toString()、valueOf()方法,并在函数执行时输出提示语句,以便查看对象在执行比较运算时的函数调用过程,如下所示。

动手写4.3.3

执行4.3.3.html,输出比较结果、函数调用过程到网页,如下图所示。

图4.3.3 比较对象与原始值

在获取原始值的过程中,函数valueOf()先执行,因此看到先输出valueOf函数的提示语句,再执行toString()。如果这两个函数中有一个的返回值是原始值(数字、字符串),则使用该值进行比较。

提示

调用对象的valueOf()和toString()获取原始值(数字、字符串),如果转换失败(返回值不是数字或字符串),会报错。其他情况调用这两个方法,不会报错。