众所周知,JavaScript是一种弱类型(语言,即变量的类型是不确定的。所以下面这篇文章主要介绍JavaScript数据类型转换的相关信息,有需要的朋友可以参考一下。
JS数据类型
在JavaScript语言中,数据类型分为两类:基本数据类型和复杂数据类型。
基本数据类型有:
数字
线
布尔型
空
不明确的
标志
bigint
复杂数据类型包括:
普通对象:对象
标准特殊对象:数组、正则表达式、日期、数学、错误…….
非标准特殊对象:数字、字符串、布尔型…….
可调用/可执行对象“函数”:函数
类型之间的转换
类型可以分为隐式类型转换和显式类型转换两种。
显式类型转换是指开发人员编写适当的代码在类型之间进行转换,如Number(value)。
隐式类型转换是指当运算符用于不同类型的值时,值可以在类型之间自动转换,如0==null。
在 JS 中只有 3 种类型的转换:
转换为数字类型:number ()/parsefile ()/parseint()
转换为字符串类型:String()/toString()
转换为布尔类型:Boolean()
类型转换的逻辑,无论是原始类型还是对象类型,都只会转换为上述三种类型中的一种。所以我们只需要弄清楚在什么场景下变成哪种类型。
转换为boolean
Explicit:可以使用Boolean()方法将值显式转换为布尔值。
隐式:隐式类型转换通常在有逻辑判断或逻辑运算符(||!)。
布尔类型转换只能有true或false结果。除了“0/NaN/空字符串/null/undefined”五个值为假,其他都为真。
转换为string
explicit:String()方法可用于将值显式转换为字符串。
字符串([1,2,3]) //'1,2,3 '
String({}) //'[object Object]'
当有运算符并且一个操作数是字符串类型时,通常会触发隐式转换。
如果存在以下条件,由“”表示的字符串串联将触发转换
如果有两面,一面是弦,就变成弦拼接;
有两面,一面是对象。
1 {} //'1[object Object]'
NaN {} //'NaN[object Object]'
转换为number
explicit:Number()方法可用于将值显式转换为数值类型。
将字符串转换为数字:空字符串变为0,如果出现任何无效的数字字符,结果为NaN。
数字(“”)//0
Number('10px') //NaN
数字(' 10') //10
布尔到数字
Number(true) //1
Number(false) //0
null和undefined被转换成数字。
数字(空)//0
数字(未定义)//NaN
无法将符号转换为数字,将报告错误:uncaughttypeerror:无法将符号值转换为数字。
BigInt删除“n”
编号(12312412321312312n)//12312412321312312
对象转换为数字,然后将执行以下步骤。
首先调用对象的Symbol.toPrimitive方法(如果此方法不存在)。
然后调用对象的valueOf来获取原始值,如果获取的值不是原始值
然后调用对象的toString将其改为字符串。
最后,基于Number()方法将字符串转换为数字。
让obj={
姓名:' xxx '
}
Console.log(obj-10) //数学运算:先将obj隐式转换成数字,然后执行运算。
//运行机制
obj[symbol . top primitive]//未定义
obj.valueof() //{name:xxx}
obj.toString() //[object object]
Number ('[object object]') //NaN
南-10 //南
obj 10 //'[object object]10 '
隐式:number的隐式类型转换很复杂,因为它可以在以下情况下触发。
比较(,=,=)
按位运算(|~)
操作(-*/%),注意:当操作中任意操作数为字符串类型时,不会触发数值类型的隐式转换。
一元运算
两边运算符==隐式转换规则
如果两边数据类型不同,需要先转为相同类型,然后再进行比较,以下几种情况需要注意一下:
可以参考这个图,比如用布尔比较对象,
对象=字符串=数值
布尔值=数值。
对象==字符串
[1,2,3]=='1,2,3' //true
[1,2,3][symbol . to primitive]//未定义
[1,2,3].valueOf() //[1,2,3]
[1,2,3].toString() //'1,2,3 '
空/未定义
null==未定义//true
Null===undefined //false不会发生隐式类型转换。
注意:null/undefined不等于任何其他值。
对象==对象
比较堆内存地址,相同的地址相等。
{}=={} //false,因为比较了地址。
圆盘烤饼
除了以上情况,只要双方类型不一致,其余都转换成数字再进行比较。
需要注意的是
{} []===0 //true
[] {}===0 //false
[] {}='[object Object]'
{} []=0
/**
*对于编译器,代码块不会返回任何值。
*那么[]就变成了强制转换成数字的过程。
* []由ToPrimitive变为'',最后由ToNumber运算将''转换为0。
**/
结束练习
设结果=100真21.2 null未定义的“腾讯”[] null 9假;
结果的结果是什么?
1.首先,100真
连接器的两侧都有数字类型。如果为true,则将number转换为1,结果为101。
2.101 21.2
连接符两边都是数字型,相加的结果是:122.2
空
连接器的两侧都有数字类型。如果null变为数字0,相加的结果是:122.2
未定义
连接器两边都有数字类型,未定义的数字是NaN,NaN和任何数据类型都计算为NaN,结果是:NaN。
5.南'腾讯'
连接器两边都有字符串类型,从NaN到' NaN '的字符串拼接,结果是:' NaNTencent '
6.NaNTencent' []
连接器两端都有字符串类型,[]将字符串转换为“”,结果为:“NaNTencent”
7.“NaNTencent”为空
连接器的两端都有字符串类型,字符串从null更改为' null '。结果是:“NaNTencentnull”
8.NaNTencentnull' 9
连接器中有一个字符串类型,9对9字符串是' 9 '。字符串拼接后的结果是:' NaNTencentnull9 '
9.NaNTencentnull9' false
连接器中有一个字符串类型,如果将false更改为' false ',字符串将被拼接,结果为:' NaNTencentnull9false '
总结
这就是这篇关于JavaScript数据类型转换的文章。有关js数据类型转换的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。