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

相关推荐
kfepiza1 小时前
JavaScript将String转为base64 笔记250802
开发语言·javascript·笔记
Warren981 小时前
Vue2博客项目笔记(第一天)
java·开发语言·javascript·vue.js·windows·笔记·ecmascript
软件测试-阿涛2 小时前
【自动化测试】Python Selenium 自动化测试元素定位专业教程
开发语言·python·selenium·自动化
勇闯逆流河3 小时前
【C++】Stack and Queue and Functor
开发语言·c++
来来走走4 小时前
Flutter开发 了解Scaffold
android·开发语言·flutter
xiangweiqiang4 小时前
用phpstudy安装php8.2后报错:意思是找不到php_redis.dll拓展时
开发语言·php
mitt_5 小时前
go语言变量
开发语言·后端·golang
TravisBytes5 小时前
gRPC C++ 从 0 到 1 → 到线上:**超详细** 环境搭建、编码范式、性能调优与 DevOps 全攻略
开发语言·c++·devops
得物技术5 小时前
Java SPI 机制初探|得物技术
javascript
kngines6 小时前
【Node.js从 0 到 1:入门实战与项目驱动】1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)
开发语言·javascript·node.js