javascript - 为什么 console.log((!+[]+[]+![]).length) 给出 9?

标签 javascript

<分区>

根据什么逻辑 js 起作用 (!+[]+[]+![]).length 返回 9?这怎么可能? 据我所知,js 具有动态类型转换,但很难理解这里发生了什么

console.log((!+[]+[]+![]).length);

最佳答案

首先:+[]

+[] 将数组转换为字符串,然后是数字。 [] 变为 "",然后变为 0。 +[123] 是 +"123",所以是 123 +[1,2] 是+"1,2",这不是数字,所以是NaN

!+[] 是 !0(不是零),所以它是 bool 值 true

第二个:true + []

将两者都转换为字符串,所以“true”+“”是“true”

第三个:![]

![] 是 bool 值 false,因为对象/数组始终是真实的。

第四:“真”+假

将boolean false 转换成字符串,所以"true"+ "false"就是"truefalse"

"truefalse".length 为 9

关于javascript - 为什么 console.log((!+[]+[]+![]).length) 给出 9?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51010468/

相关文章:

javascript - 在react.js和Yii2 API中上传文件

javascript - 将事件放置在动态生成的图像上

JavaScript 从一个范围内随机选择/返回一个数字?

JavaScript 将字节数组转换为 JSON 并返回

c# - JavaScript 或 C#

javascript - 使用 Material ui 管理日期选择器日期

php - 直接从 (zebra) 打印机上的浏览器打印贴纸/条形码标签

javascript - 给定node.js中的日期集合,如何获取每天的最新时间?

javascript - jQuery EasyUI 插件以编程方式实例化

javascript - 如何停止在列表中传播 mouseout 事件?