【基础类】—类型转换

一、数据类型

  1. 原始类型

    Boolean、Null、Undefined、Number、String、Symbol

  2. 对象

    Object

二、显示类型转换

  1. Number函数, Number(param)
    1-1. param 是 原始类型 时
    数值:转换后还是原来的值
    字符串:如果可以被解析为数值,则转换为相应的数值,否则得到NaN。空字符串转为0
    布尔值:true转成1, false 转成 0
    undefined: 转成NAN
    null: 转成 0

1-2 param 是 Object时

① 先调用对象自身的ValueOf方法,如果返回值是原始类型,则直接对该值进行Number方法

②先调用对象自身的ValueOf方法,如果返回值是复合类型,再调用对象的toString方法, 如果toString方法的返回值是原始类型的值,则对该值使用Number方法

③ 先调用对象自身的ValueOf方法,如果返回值是复合类型,再调用对象的toString方法, 如果toString方法的返回值是复合类型的值,则报错

javascript 复制代码
if (Obj.ValueOf() === 原始类型) {
    let date = new Date() 
	date.valueOf() // 1691147634782
	Number(date) === Number(date.valueOf()) === 1691147634782
	retun Number(Obj.ValueOf())
} else if (Obj.ValueOf() === 复合类型 && Obj.ValueOf().toString() === 原始类型) {
	Number(['1']) === Number(['1'].valueOf().toString()) === 1
	let obj = {name: '张三'}
	Number(obj) === Number(obj.valueOf().toString())  === NaN
	return Number(Obj.ValueOf().toString())
} else if(Obj.ValueOf() === 复合类型 && Obj.ValueOf().toString() === 复合类型 ) {
	return 报错
}
  1. String函数,String(param)
    2-1. param 是 原始类型 时
    数值:转换为相应的字符串
    字符串:返回原来的值
    布尔值:true转成"true", false 转成 "false"
    undefined: 转成 "undefined"
    null: 转成 "null"

2-2 param 是 Object时

① 先调用toString方法,如果toString方法返回的是原始类型的值,则对该值使用String方法

②先调用toString方法,如果返回值是复合类型,再调用对象的ValueOf方法, 如果ValueOf方法的返回值是原始类型的值,则对该值使用String方法

③ 先调用对象自身的toString方法,如果返回值是复合类型,再调用对象的ValueOf方法, 如果ValueOf方法的返回值是复合类型的值,则报错

javascript 复制代码
在这里插入代码片
  1. Boolean函数 Boolean(param)
    当param = undefined、null、-0、+0、NaN、'' 时, 都返回false, 其他值一律返回true

三、隐式类型转换

  1. 四则运算 (加减乘除)
  2. 判断语句 (if、else、三元运算符)
  3. Native调用 (console.log, alert 自动转换为字符串类型,隐式转换背后调用String函数)
  4. 常见题目

    \] + \[

javascript 复制代码
首先把第一个[] 转换为原始类型
=  [].ValueOf().toString()  + []
= '' + []
因为 '' 为字符串类型, [] 需要转换为字符串类型
= '' + [].ValueOf().toString()
= '' + ''
= ''

\] + {} ```javascript 首先把第一个[] 转换为原始类型 = [].ValueOf().toString() + {} 因为 '' 为字符串类型, {} 需要转换为字符串类型 = '' + {}.ValueOf().toString() = '' + '[object Object]' = '[object Object]' ``` {} + \[

{} + {}

true + true

1 + {a:1}

相关推荐
融化的雪3 分钟前
reactflow整理节点,尾节点位置的大坑
开发语言·前端·javascript
豐儀麟阁贵10 分钟前
2.6 代码注释与编码规
java·开发语言
程序员三明治12 分钟前
【Mybatis从入门到入土】ResultMap映射、多表查询与缓存机制全解析
java·sql·缓存·mybatis·resultmap·缓存机制·多表查询
Gazer_S14 分钟前
【理解React Hooks与JavaScript类型系统】
前端·javascript·react.js
鹏多多14 分钟前
前端IndexedDB数据库高效管理插件localForage的教程+案例
前端·javascript·vue.js
华仔啊17 分钟前
Java 重试机制没写对,线上很容易出问题!这份生产级方案请收好
java·后端
你不是我我19 分钟前
【Java 开发日记】什么是线程池?它的工作原理?
java·开发语言
我血条子呢20 分钟前
[HTML]播放wav格式音频
前端·html·音视频
Seven9721 分钟前
剑指offer-35、数组中的逆序对
java·leetcode
梵得儿SHI35 分钟前
Java 反射机制深度解析:从运行时 “解剖” 类的底层逻辑
java·开发语言·反射·反射机制·private·类成员·反射的三大核心功能