Js中的隐式类型转换

其他类型的值转为string规则如下

  1. null转为"null"
  2. undefined 转为 "undefined"
  3. true 和 false 转为 "true"和"false"
  4. 数字类型10 转为 "10"
  5. 数组:转为字符串将所有元素用逗号连接起来1,2,3转为1,2,3,空数组转为空字符串
  6. 普通对象转为"object object"

基本类型转为string都是直接再原来的基础上加上一个引号

scss 复制代码
'[object object]'=={} // true
'1,2,3' == [1,2,3]
String(null) // 'null'
String(undefined) // 'undefined'
String(true) // 'true'
String(10) // '10'
String(1e21) // '1e+21'
String([1,2,3]) // '1,2,3'
String([]) // ''
String([null]) // ''
String([1, undefined, 3]) // '1,,3'
String({}) // '[object Objecr]'

其他类型的值转为number的规则

  1. null 转为 0
  2. undefined 转为 NaN
  3. 字符串如果是纯数字就转为对应的数字,否则就会转换失败,只能转为NaN
  4. true转为1,false转为0 这个和Java语言中的转换规则是一致的
  5. 数组:首先会转为原始类型,也就是ToPrimitive,然后根据转换之后的原始类型按照上面的规则处理
  6. 对象:处理方式和数组相同
scss 复制代码
Number(null) // 0
Number(undefined) // NaN
Number('10') // 10
Number('10a') // NaN
Number('') // 0 
Number(true) // 1
Number(false) // 0
Number([]) // 0
Number(['1']) // 1
Number({}) // NaN

其他类型的值转为boolean

  1. false、null、undefined、空字符串、0和NaN转为false
  2. 其他所有的都转为true
ini 复制代码
console.log(null==false) // false
console.log(undefined==false) // false
console.log(""==false) //true
console.log(0==false) // true

隐式类型转换的一些规则

  1. 只要boolean类型参与比较那么布尔类型都会先转为number
  2. 数字类型和字符串比较,字符串会被转为数字类型
ini 复制代码
0 == '' // true 空字符串先转为数字,空字符串转为数字0
1 == '1' // true 字符串'1'直接转为数字1
1e21 == '1e21' // true 同上
Infinity == 'Infinity' // true 同上
true == '1' // true true是boolean类型参与运算自己先转为数字为1,然后就是数字和字符串的比较,'1'转为数字也会得到1
false == '0' // true 同上
false == '' // true false先转为数字为0,然后变为字符串和数字的比较,空字符串转为数字就是0

NaN和任何值都不相等,包括它自己。这是一个js中的异类单独记一下吧
console.log(undefined == null) //true

null 和 undefined 与自身都是相等的,但是和其他类型(除了undefined和null)都不相等
console.log(null == null)// true
console.log(undefined == undefined)//true
console.log(null==0)//false
console.log(undefined==0)//false

相关推荐
程序员黑豆5 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC6 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea6 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
浮生望6 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少7 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波0077 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis8 小时前
es6知识点1-自备使用
前端·ecmascript·es6
小爬的老粉丝8 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
计算机魔术师9 小时前
新兴多智能体系统的模式与问题
前端
用户0595401744610 小时前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css