JavaScript中的类型转换

本文介绍了JavaScript中的六种数据类型及类型之间的转换方式,包括隐式和显式转换,并提供了具体的例子来帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型

JS中的类型一共有六种。包括五种基本类型:数值(Number)、字符串(String)、undefined、null和布尔型(Boolean),一种复杂数据类型(Object)(ES6中新增了Symbol类型,这里暂不考虑)。
JS的数据类型之间可以进行类型转换

类型转换

JavaScript中的取值类型非常灵活。比如当JavaScript期望使用一个布尔值的时候,我们可以提供任意类型的值,JavaScript将根据需要自行转换类型。一些值转换为true,其他值转换为false。

10 + 'object';//‘10 object’数字10转换成字符串
'7' * '4';//28 两个字符串均转换为数字
1 - 'x';//NaN 字符串‘x’无法转换为数字

下表简要说明了在JavaScript中如何进行类型转换

字符串数字布尔值对象
undefined‘undefined’NaNfalsethrows TypeError
null‘null’0falsethrows TypeError
true‘true’1new Boolean(true)
false‘false’0new Boolean(false)
”(空字符串)0 false new String(”)
‘1.2’(非空,数字)1.2truenew String(‘1.2’)
‘one’(非空,非数字)NaNtruenew String(‘one’)
0‘0’falsenew Number(0)
-0‘0’falsenew Number(-0)
NaN‘NaN’falsenew Number(NaN)
Infinity‘Infinity’truenew Number(Infinity)
-Infinity‘-Infinity’truenew Number(-Infinity)
1(无穷大,非零)‘1’truenew Number(1)
{}(任意对象)toString()、valueOf()valueOf() toString()true
[](空数组)0true
[9](一个数字元素)‘4’4true
[‘a’](其他数组)使用join()方法NaNtrue
function(){}(任意函数)toString() valueOf()valueOf() toString()true

这里需要说明一下:对象转换为字符串的时候先调用toString()方法,如果对象没有toString()方法,则调用valueOf()方法,否则抛出错误。对象转换为数值的时候,如果对象有valueOf()方法,则调用该方法返回数值。否则,如果对象具有toString()方法,该方法返回字符串,然后js将其转换为数值并返回。否则,js抛出错误

显式类型转换

显示类型转换最简单的方法是使用Boolean()、Number()、String()、Object()函数。当不通过new运算符调用这些函数时,它们会作为类型转换函数

Number('3');//3
String(false);//'false'
Boolean([]);//true
Object(3);//new Number(3)

另外,当将其他类型的值转换为数值的时候,还有parseInt()方法。不同于Number()函数,parseInt()函数在转换字符串是,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直到好到第一个非空格字符。如果第一个字符不是数字字符或者符号,parseInt()就会返回NaN;也就是说,用parseInt()转换空字符串、空数组会返回NaN(Number()对空字符串、空数组会返回0)。parseInt也能够识别出各种整数格式(十进制、八进制、十六进制)。除了parseInt()之外,parseFloat()则可以解析整数和浮点数

parseInt('1234blue');//1234
parseInt('');//NaN
parseInt('oxA",16)//10(十六进制数)
parseInt(22.5);//22
parseInt('070',8)56(八进制数)
parseInt('70');//70
parseFloat('3.14 met');//3.14
parseFloat('$72.3');//NaN

隐式类型转换

JavaScript中的某些运算符会做隐式类型转换,有时用于类型转换。

  • 如果‘+’运算符的一个操作数是字符串,它将会把另外一个操作数转换为字符串。
  • 如果‘-’运算符的一个操作数是数值型,它将会把另外一个操作数转换为数值型。
  • 一元‘+’运算符将其操作数转为数字。
  • 一元‘!’运算符将其操作数转换为布尔值并取反
  • 相等运算符‘==’中,如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值(false转换为0,true转换为1);如果操作数是一个字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;当两个值都是对象 (引用值) 时, 比较的是两个引用值在内存中是否是同一个对象
  • 小于、大于、小于等于和大于等于这几个运算符,如果一个操作数是数值,则先将其转换为数值,在进行比较
2 + '4';//'24'('+'操作符将数值型的2转换为了字符串类型 +运算符为字符串连接符)
'2' - 1;//1(减操作符将字符串类型转换为数值型)
+'2';//2(字符串类型转换为了数值型)
!!2;//true(数值型转换为布尔型)
true == 2; //false(true转换为数值11==2返回false)
null == undefined; //true
[] == false; //true(当对象和布尔值进行比较的时候 将两个值变为数值的形式)
[] == [];//false(比较对象的地址是否相同)
[] == ![];//true(![]为false 当对象和布尔值比较的时候转换为数值进行比较)
0 == '';//true (字符串转换为数值0

总结

JavaScript中类型转换有的时候很隐蔽,所以在写判断语句或者做运算的时候要注意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值