全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

JavaScript中如何进行隐式类型转换?

发布时间:2022-10-09 17:49:42
发布人:wjy

  首先要介绍ToPrimitive方法,这是 JavaScript 中每个值隐含的自带的方法,用来将值 (无论是基本类型值还是对象)转换为基本类型值。如果值为基本类型,则直接返回值本身;如果值为对象,其看起来大概是这样:

JavaScript中如何进行隐式类型转换1

  type的值为number或者string。

  1. 当type为number时规则如下:

  调用obj的valueOf方法,如果为原始值,则返回,否则下一步;调用obj的toString方法,后续同上;抛出TypeError 异常。

  2. 当type为string时规则如下:

  调用obj的toString方法,如果为原始值,则返回,否则下一步;调用obj的valueOf方法,后续同上;抛出TypeError 异常。

  可以看出两者的主要区别在于调用toString和valueOf的先后顺序。默认情况下:

  如果对象为 Date 对象,则type默认为string;其他情况下,type默认为number。

  总结上面的规则,对于 Date 以外的对象,转换为基本类型的大概规则可以概括为一个函数:

JavaScript中如何进行隐式类型转换2

  而 JavaScript 中的隐式类型转换主要发生在+、-、*、/以及==、>、<这些运算符之间。而这些运算符只能操作基本类型值,所以在进行这些运算前的第一步就是将两边的值用ToPrimitive转换成基本类型,再进行操作。

  以下是基本类型的值在不同操作符的情况下隐式转换的规则 (对于对象,其会被ToPrimitive转换成基本类型,所以最终还是要应用基本类型转换规则):

  1. +操作符 +操作符的两边有至少一个string类型变量时,两边的变量都会被隐式转换为字符串;其他情况下两边的变量都会被转换为数字。

JavaScript中如何进行隐式类型转换3

  2. -、*、\操作符

  NaN也是一个数字

JavaScript中如何进行隐式类型转换4

  3. 对于==操作符

  操作符两边的值都尽量转成number:

JavaScript中如何进行隐式类型转换5

  4. 对于<和>比较符

  如果两边都是字符串,则比较字母表顺序:

JavaScript中如何进行隐式类型转换6

  其他情况下,转换为数字再比较:

JavaScript中如何进行隐式类型转换7

  以上说的是基本类型的隐式转换,而对象会被ToPrimitive转换为基本类型再进行转换:

JavaScript中如何进行隐式类型转换8

  其对比过程如下:

JavaScript中如何进行隐式类型转换9

  又比如:

JavaScript中如何进行隐式类型转换10

  运算过程如下:

JavaScript中如何进行隐式类型转换11

相关文章

flutter和uni-app在应用层面有什么区别?

flutter和uni-app在应用层面有什么区别?

2023-10-14
Flutter和 qt的区别都有什么?

Flutter和 qt的区别都有什么?

2023-10-14
rnn和lstm中batchsize和timestep的区别是什么?

rnn和lstm中batchsize和timestep的区别是什么?

2023-10-14
什么是OA服务器?

什么是OA服务器?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取