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

相关推荐
努力努力再努力wz3 小时前
【Qt入门系列】:按钮组件全解析:从 QAbstractButton 到快捷键事件、单选与复选机制
c语言·开发语言·数据结构·c++·git·qt·github
skywalk81634 小时前
言知(Yanzhi)系统提升建议报告和完工报告 by AutoCoder
开发语言·编程
yunn_4 小时前
单例模式两种实现方法
开发语言·c++·单例模式
我材不敲代码4 小时前
Python基础:列表详解、增删改查及常用高阶操作
开发语言·windows·python
zithern_juejin4 小时前
new 运算符
javascript
AI玫瑰助手4 小时前
Python运算符:成员运算符(in/not in)的使用场景
开发语言·python·信息可视化
前端毕业班4 小时前
uniapp web 灵活控制 style scoped
前端·javascript·vue.js
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题 第77题】【Mysql篇】第7题:回表查询与全表扫描的区别?
java·开发语言·数据库·mysql·面试
水木流年追梦5 小时前
大模型入门-大模型分布式训练2
开发语言·分布式·python·算法·正则表达式·prompt
张元清5 小时前
在 React 里写动画又不跟渲染周期较劲:useRafFn、useRafState、useFps、useDevicePixelRatio、useUpdate
前端·javascript·面试