前端八股总结JS分支-类型转换
Last updated on November 4, 2024 am
总结一下JS的类型转换
参考【面试篇】寒冬求职季之你必须要懂的原生JS(中) · Issue #28 · YvetteLau/Blog(是真寒冬🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶寒死人了)
Typora字一多就卡,只能抽出来单独写了🥲JS知识点好多,背不完,根本背不完
一、强制类型转换
(1)Number()
将任意类型的参数转换为数值类型
- 布尔值:转化为0或1
- 数字:返回自身
- null:返回0
- undefined:返回NaN
- 字符串:
- 如果只包含数字(可十六进制,可正负号),转化为十进制
- 如果包含有效的浮点形式,转化为浮点数值
- 如果是空字符串,转化为0
- 如果不是以上类型,转化为NaN
- Symbol:抛出错误(Symbol唯一且不可变)
- 如果是对象,调用对象的valueof方法,再根据前面规则转换;如果转换的结果是NaN,调用对象的toString方法再依次按照前面的规则转换返回的字符串值
(2)parseInt(param,radix)
用于将字符串转化为整数。
- param:要解析的字符串
- 会忽略掉字符串开始的空格
- 从第一个有效字符开始解析,直到无法解析时停止(‘123abc’->123)
- 如果不是字符串会被自动转化为字符串
- radix:进制基数
- 2-36之间的整数,表示响应进制数
- 如果未指定,会根据param的前缀识别,0x开头解析为十六进制,0开头会被解析为八进制或者十进制
(3)toString()
1 |
|
(4)String()
和上面一致,只是遇到null和undefined会转换成‘null’和‘undefined’,不会报错
(5)Boolean()
假值:null,0,undefined,NaN,false,“”转化为false,其他都是true
二、隐式转换
(1)&& || ! if/while条件判断
需要将数据转为Boolean类型,同Boolean()
(2)+,-,*,/
1、+
如果操作数是对象、数值或者布尔值,使用toString转换规则
1 |
|
2、-
、*
、/
操作符
针对的是运算,如果操作值之一不是数值,则被隐式调用Number()函数进行转换。如果其中有一个转换为NaN,结果为NaN.
(3)<=,>=,<,>
- 若两个操作值都是数值,进行数值比较
- 如果都是字符串,比较字符串对应的字符编码值
- 如果有一方是Symbol,报错
- 除上述情况都进行Number()强制转换再比较
(4)==
- 类型相同不需要进行类型转换
- 如果有一个操作值是null或者undefined,另一个也许必须是null/undefined才是true
- 如果其中一个是Symbol,返回false
- 如果是string/boolean类型,就转化为number再比较
- 如果一个是Object,就调用Object的valueOf或者toString方法来获取原始值再比较
(5)下列代码在什么情况下打印出1
1 |
|
JavaScript 在遇到 ==
操作符时,会尝试将操作数转换为相同类型。如果一方是对象,则会调用该对象的 valueOf
或 toString
方法以获取一个原始值。以下方法利用这一机制,每次返回不同的值来满足 ==
的比较条件。
1、valueof
定义一个对象,并重写它的valueof方法,使得每次转换a为原始值时返回不同的值
1 |
|
2、toString
1 |
|
JavaScript 在遇到 ==
操作符时,会尝试将操作数转换为相同类型。如果一方是对象,则会调用该对象的 valueOf
或 toString
方法以获取一个原始值。以上方法利用这一机制,每次返回不同的值来满足 ==
的比较条件。