当前位置: 首页 > news >正文

【基础类】—类型转换

一、数据类型

  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方法的返回值是复合类型的值,则报错

if (Obj.ValueOf() === 原始类型) {let date = new Date() date.valueOf() // 1691147634782Number(date) === Number(date.valueOf()) === 1691147634782retun Number(Obj.ValueOf())
} else if (Obj.ValueOf() === 复合类型 && Obj.ValueOf().toString() === 原始类型) {Number(['1']) === Number(['1'].valueOf().toString()) === 1let obj = {name: '张三'}Number(obj) === Number(obj.valueOf().toString())  === NaNreturn 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方法的返回值是复合类型的值,则报错

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

三、隐式类型转换

  1. 四则运算 (加减乘除)
  2. 判断语句 (if、else、三元运算符)
  3. Native调用 (console.log, alert 自动转换为字符串类型,隐式转换背后调用String函数)
  4. 常见题目
    [] + []
首先把第一个[] 转换为原始类型
=  [].ValueOf().toString()  + []
= '' + []
因为 '' 为字符串类型, [] 需要转换为字符串类型
= '' + [].ValueOf().toString()
= '' + ''
= ''

[] + {}

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

{} + []
{} + {}
true + true
1 + {a:1}

http://www.lryc.cn/news/111094.html

相关文章:

  • 【云原生】 一文了解docker中的网络
  • 嵌入式开发学习(STC51-15-红外遥控)
  • 代码编辑器实践之vue-codemirror使用
  • Mapstruct
  • 初阶C语言——特别详细地介绍函数
  • pulsar-client-1-2 PulsarClient构造函数
  • 原型链污染是什么
  • java之石头迷阵单击游戏、继承、接口、窗体、事件、组件、按钮、图片
  • Debian 系列 Linux 的静态 DNS 、gateway 、IP 设置和网络重启
  • IP路由基础+OSPF 基础
  • window远程连接Linux
  • MyBatis 查询数据库之二(增、删、改、查操作)
  • unraid docker桥接模式打不开页面,主机模式正常
  • 第七章:进程间通信(IPC)——构成进程间通信的信道方案
  • 部分常用CSS样式
  • 思科单臂路由、lacp链路聚合、NAT实验
  • 【力扣每日一题】2023.8.5 合并两个有序链表
  • QT 驱动条码打印机(没有验证过)
  • Kafka介绍
  • Django使用uwsgi+nginx部署,admin没有样式解决办法
  • 穷举深搜暴搜回溯剪枝(3)
  • Bash 脚本的参数等
  • 从哪些方面学HTML技术? - 易智编译EaseEditing
  • 非阻塞IO
  • Debian如何让multilib和交叉编译工具链共存
  • Flink之JDBC Sink
  • lifecycleScope Unresolved reference
  • P5960 【模板】差分约束算法
  • VSCode---通过ctrl+鼠标滚动改变字体大小
  • 视频监控汇聚平台EasyCVR视频分享页面WebRTC流地址播放不了是什么原因?