js逆向基础2数据类型转换

一.前篇补充

BigInt

BigInt也是一种数据类型。

eg:BigInt("10"),结果10n,用typeof 10n结果为bigInt类型

undefined 与null与NaN的区别

undefined(未定义)是已声明,未赋值,如var a;

null(空值)是已声明,且赋值为null,如,var a=null;。常用来清空变量以预防内存泄漏等问题。

NaN(表示不合法的数),NaN和任何数据类型都不相等,包括NaN本身,其他数据类型和NaN运算的结果都是NaN。如undefined +1为NaN。表示不合法的数字。可以通过isNaN()来判断某个值是否为数,是否合法。

无穷数

Infinity和-Infinity 

Infinity 正无穷比任何有限数都大

-Infinity 负无穷比任何有限数都小

二.数据类型转换

显示转换/强制转换

通过人工进行干预的情况下,对数据类型进行转换的方法。比如像之前提到的bigInt("10")就是把字符串强制转换为bigInt类型

逆向常用网站(当做字典去查)

强转为数字类型

Number([val])

0.数组 Number([]),空数组强转数字为0,Number([1])为1,如果数组有多个元素,为NaN因为不合法

1.字符串转数字类型:空字符串强转为数字类型为0,如果是有效数字字符串则强转为数字类型为对应的数字,如Number("1234")结果为1234,如果出现的是任何非有效数字字符串,结果都是NaN

2.布尔值强转换为数字类型:如果是true为1,false 为0。

3. null强转为数字类型为0。

4.undefined 强转为数字类型为NaN

5.Symbol无法强转为数字类型,报错:Uncaught TypeError: Cannot convert a Symbol value to a number

6.bigInt强转为数字类型去除n就好

7.对象强转为数字类型,首先调用对象的Symbol.toPrimitive如果没有返回值,再调用Valueof没有返回值,再调用toString(注意普通对象Valueof返回它本身,就是引用类型,没有原始值)

如: var a = {} a[Symbol.toPrimitive]为undefined继续调用a.valueof()返回空对象,再调用a.toString()返回值为'[ObjectObject]',而'[ObjectObject]'强转为Number为NaN,因为字符串强转为数字类型看是否为数字字符。

如果有返回值看下列图:

01fccd8bbc68424583fc231f8b3146d0.png

3cb3d9a5a7e24e728c6899eb28e96a12.png 

238a3b0752e649018b4851bc8ae4b92c.png 

8.函数可视为对象,按对象处理

parseInt([val],[radix])

其中[val]必须为字符串,如果不是先隐式转换为字符串[通过String[val]转换。

[radix]进制 ,如果不写,或者0,默认是10进制[特殊情况:如果字符串是以0x开始的,默认是16进制]
有效范围也:2~36之间,如果不在这个区间,结果直接是NaN

val 值如果第一个字符不是数字字符则结果为NaN,如果是数字字符和非数字字符则截断非数字字符,然后按照[radix]转换为10进制

dca341c891424aba9c3e8d8cd870b7db.png

强转为字符串

String([val])

绝大多数情况下String底层使用的时候会调用[val]的toString()方法,但是针对null/undefined等String()会有特殊的处理。可以视为一种安全的字符串转换方案。当然也可以通过重写某一变量的toString()方法,使String方法变成我们自己想实现的功能。

String([val])的结果除了可以是字符串,也是是别的类型;val.toString()的结果只能是字符串

1.若val是一个原始值则直接强转为字符串。

2.若Val是一个对象,则按照Symbol.toprimitive没有返回值,则调用toString方法

空数组的toString()方法为空字符串

空对象的toString()为'[ObjectObject]'

ob = {}空对象时, ob.valueof是本身

Ob={}空对象时, ob.toString() 是{‘objectobject’}
defe683864394cf9bc4ff4dcfa43e9b6.png

3e2d656356bb4c9abc62c15c1fbb5fe1.png 

7284f438e92641ea85bd506c9c6c489a.png 

强转为布尔值

 Boolean([val])

除0,null,undefined,false ,NaN,空字符串的返回值为false,其余都为true,尤其要注意空对象和空数组也是true

 

 

 

 

 

 

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值