JS之隐式转换与布尔判定

大家思考一下

\] + \[ \]= ? **答案是空字符串** 为什么呢? **当做加法运算的时候,发现左右两端存在非原始类型,也就是引用类型对象,就会对对象做隐式类型转换** 如何执行的?或者说怎么查找的? 第一步,会去对象中查找是否有 **\[Symbol.toPrimitive\]** ```javascript let obj = { [Symbol.toPrimitive]() { return 123 //如果返回引用数据类型 下面打印会报错 } } console.log(obj + 1); //124 ``` **如果不存在就进入第二步,查找是否存在valueOf** ```javascript let obj = { valueOf() { return 1 } } console.log(obj + 1); //2 ``` **如果valueOf返回的也是引用数据类型就会进入第三步,toString()** ```javascript let obj = { valueOf() { return [] //如果返回引用数据类型就会进入第三步 }, toString() { return 1 } } console.log(obj + 1); //2 ``` **所有为什么\[ \] + \[ \] = " " 呢? 因为它依次查找,找到最后发现是 \[ \] 就会执行最后一步 \[ \].toString()也就是空字符串** **那\[ \] + !\[ \] = ? 答案是false** 这个是布尔判定 不是类型转换 **大家熟知的布尔为false的有:NaN Undefined Null " " 0 false** 除了这些东西 其它都为true !\[ \] 为false 空字符串 + false = false ```javascript console.log([] + ![]);//false ``` ![在这里插入图片描述](https://file.jishuzhan.net/article/1751855834104598529/c5eea0b13ec30180cb0299856660fda8.webp) **感谢大家的阅读,如有不对的地方,可以向我提出,感谢大家!**

相关推荐
比特森林探险记1 分钟前
Element Plus 实战指南
前端·javascript
problc6 分钟前
在 OpenClaw 里一句话记账:消费说出来,账单自动进乖猫记账 App
开发语言·python
橙露7 分钟前
Vue3 自定义指令:实战封装全局常用工具指令
开发语言
赵谨言8 分钟前
基于YOLOv5的海棠花花朵检测识别:文献综述与研究展望
大数据·开发语言·经验分享·python
FlyWIHTSKY11 分钟前
Vue3 单文件中不同的组件
前端·javascript·vue.js
历程里程碑18 分钟前
41 .UDP -3 群聊功能实现:线程池助力多客户端通信
linux·开发语言·网络·数据结构·c++·网络协议·udp
zly886537220 分钟前
windsurf rules与skill的使用
linux·c语言·开发语言·驱动开发
笨笨马甲26 分钟前
Qt network开发
开发语言·qt
不染尘.32 分钟前
排序算法详解1
开发语言·数据结构·c++·算法·排序算法
Via_Neo32 分钟前
JAVA中对数的表达,将浮点数转为保留指定位数的字符串
java·开发语言