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) **感谢大家的阅读,如有不对的地方,可以向我提出,感谢大家!**

相关推荐
消失的旧时光-194317 小时前
ScheduledExecutorService
android·java·开发语言
勇闯逆流河17 小时前
【C++】用红黑树封装map与set
java·开发语言·数据结构·c++
山,离天三尺三17 小时前
深度拷贝详解
开发语言·c++·算法
future_studio18 小时前
聊聊 Unity(小白专享、C# 小程序 之 加密存储)
开发语言·小程序·c#
m0_7369270418 小时前
Spring Boot自动配置与“约定大于配置“机制详解
java·开发语言·后端·spring
feiyangqingyun18 小时前
Qt项目作品在苹果macos上编译运行效果/视频监控系统/物联网平台等
开发语言·qt·macos
东东23318 小时前
前端规范工具之husky与lint-staged
前端·javascript·eslint
你不是我我19 小时前
【Java 开发日记】我们来说一说 Redisson 的原理
java·开发语言
kk”19 小时前
C++ stack 和 queue
开发语言·c++
岁月宁静19 小时前
在 Vue 3.5 中优雅地集成 wangEditor,并定制“AI 工具”下拉菜单(总结/润色/翻译)
前端·javascript·vue.js