,,JavaScript数据类型转换详解(推荐)

,,JavaScript数据类型转换详解(推荐)

众所周知,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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: