JS学习笔记

JS数据类型转换(2)

2018-10-23  本文已影响0人  zh2443

在上一篇的js数据类型转换(1)中,只考虑了基础数据类型之间的相互转换,未考虑对象和基础类型的转换,本篇做介绍。

基础类型转对象

基础类型可以通过对应的构造函数转换为对应的对象类型,不做赘述。

对象转基础类型规则

1. 对象转布尔

所有对象转换为布尔值时,结果都为true。

2. 对象转字符串

对象转换为字符串时,会先调用对象的toString()方法,如果该方法返回原始值,则返回该原始值的字符串值;如果没有toString()方法或者该方法返回的不是原始值,则会调用valueOf()方法,如果该方法返回原始值类型,则返回该原始值的字符串值;如果没有valueOf()方法或者该方法返回的不是原始值,则抛出类型异常的错误。

3. 对象转数值

对象转换数值时,逻辑与对象转字符串相似,只是会先尝试调用valueOf()方法,再尝试调用toString()方法。

上述规则中,如果对象有Symbol.toPrimitive属性的话,会优先调用,它的优先级最高。

隐式类型转换中对象转基础类型的规则

1. +

如果一个是对象,另一个是数字或字符串,则将对象转为原始值再计算(日期类型转为字符串,其他的先尝试调用valueOf()方法再尝试调用toString()方法转换为原始值);如果都是对象,则先尝试调用valueOf()方法再尝试调用toString()方法转换为原始值再计算。

2. -(一元运算符)

转换为数字再计算。

3. >,<,>=,<=,==

比较运算符两边都会转换为数字或者字符串进行比较。两边的任一对象都会先尝试调用valueOf()方法转换为原始值,再尝试调用toString()方法转换为原始值,如果原始值都是字符串类型,则进行字符串的比较;如果有一个为数字类型,则另一个也转换为数字,进行比较。

4. -,*,/,%

转换为数字进行计算。

上一篇 下一篇

猜你喜欢

热点阅读