欢迎光临散文网 会员登陆 & 注册

JS的数据类型转换

2022-06-22 22:04 作者:朵宝特工007  | 我要投稿

一、自动类型转换

一般是跟运行环境和操作符联系在一起的,是一种隐式转换,具有一定的规律性,大体可以划分为:转换为字符串类型、转换为布尔类型、转换为数字类型。

(1)转换为字符串类型

当加号“+”作为二元操作符,并且其中一个操作数为字符串类型时,另一个操作数将会被无条件转为字符串类型。

对于基础类型,会直接转换为与字面量相一致的字符串类型。

对于复合类型,会先试图调用对象的valueOf()方法(返回对象的指定原始值),如果此方法返回值是引用类型,则接着再调用它其toString()方法(返回对象的字符串表示),最后将返回值转为字符串类型。

不同类型对象的valueOf()方法和toString()方法的返回值

(2)转换为布尔类型

  • 数字转为布尔类型

    当数字在逻辑环境中执行的时候,会自动转为布尔类型。

    0和NaN会自动转为false,其余数字都被认为是true(非0负值也会被认为是true)。

  • 字符串转为布尔类型

    和数字类似,当字符串在逻辑环境中执行时,也会被转换为布尔类型。

    空字符串会被转为false,其他字符串都会转为true。

  • undefined和null转为布尔类型

    当undefined和null在逻辑环境中执行时,都被认为是false。

  • 对象转为布尔类型

    当对象在逻辑环境中执行时,只要当前引用的对象不为空,都会被认为是true。如果一个对象的引用为null,会被转换为false。虽然使用typeof检测null为“object”,但它并不是严格意义上的对象类型,只是一个对象空引用的标识。

    另外,这里的逻辑环境不包括比较操作符(==),因为它会根据valueOf()和toString()将对象转为其他类型。

由于对象总被认为是true,使用基础类型的包装对象时,要特别小心。

对于Boolean类,有个特别需要注意的地方,当传入一个字符串时,它不会去解析字符串内部的值,而是做一个简单的判断,只要不是空字符串,都会被认为是true。

  • 逻辑非、逻辑与和逻辑或操作符转布尔类型

    连用两个逻辑非可以把一个值转为布尔类型。

(3)转换为数字类型

操作数在数字环境中参与运算时,会被转为相应的数字类型值,其转换规则如下:

  • 字符串类型转为数字:空字符串被转为0,非空字符串中,符合数字规则的会被转换为相应的数字,否则视为NaN。

  • 布尔类型转为数字:true被转为1,false被转为0。

  • null被转为0,undefined被转为NaN。

  • 对象类型转为数字:valueOf()方法先试图被调用,如果调用返回的结果为基础类型,则再将其转为数字;如果返回的结果不是基础类型,则会再试图调用toString()方法,最后试图将返回结果转为数字,如果这个返回结果是基础类型,则会得到一个数字或NaN,如果不是基础类型,则会抛出一个异常。

  • 一个其他类型的值被转换为数字,跟其参与运算的操作符有很密切的联系。


二、强制类型转换

(1)String

把一个数据类型强制转为String类型有两种方法:

  • 方法一:toString()方法

    Null和Undefined不能进行转换,因为它们没有toString()方法。

  • 方法二、调用String()函数

(2)Number

    转换情况:

    1、数字->数字

    2、非全数字->NaN

    3、空串和满空格->0

    4、布尔值转换:true->1,false->0

    5、null->0

    6、Undefined->NaN

  • 方法一、Number()函数

  • 方法二、ParseInt();ParseFloat()

    这种方式一般用于字符串,其他类型会优先转换为字符串类型然后再操作。

    ParseInt():从字符串中取整数,从左向右开始检查,遇见非数字的后面全不取。

    parseInt(string, radix) 当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

    举例,如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

    ParseFloat():从字符串中取出有效的小数,从左向右开始检查,遇见非数字的后面不取。

    其他类型:

(3)Boolean

Boolean()函数:

转换为Boolean只有一个方法。

转换值:

  • 数字:0和NaN为false,其他为true。

  • 字符串:空串为false,其他为true。

  • null和undefined都是false。

  • Object(对象)转换也为true。


JS的数据类型转换的评论 (共 条)

分享到微博请遵守国家法律