Javascript 为什么console.log((!+;[]+;[]+;![])的.length会给出9?

Javascript 为什么console.log((!+;[]+;[]+;![])的.length会给出9?,javascript,Javascript,通过什么逻辑js工作(!+[]+[]+![])。长度返回9?这怎么可能? 我知道js有动态类型转换,但很难理解这里发生了什么 console.log((!+[]+[]+![]).length)首先我们必须理解+[]+[]+![]: !+[] = !0 = true true+[] = "true" ![] = false "true"+false = "truefalse" 所以的长度+[]+[]+![]是“truefalse”的长度,所以它是9第一个:+[] +[]正在将数组转换为字

通过什么逻辑
js
工作(!+[]+[]+![])。长度返回9?这怎么可能? 我知道js有动态类型转换,但很难理解这里发生了什么


console.log((!+[]+[]+![]).length)首先我们必须理解+[]+[]+![]:

!+[] = !0 = true   
true+[] = "true"
![] = false
"true"+false = "truefalse"
所以
的长度+[]+[]+![]
是“truefalse”的长度,所以它是9

第一个:+[]

+[]正在将数组转换为字符串,然后转换为数字。[]变为“”,然后变为0。 +[123]是+123,所以是123 +[1,2]是+“1,2”,这不是一个数字,所以它是NaN

!+[]是!0(不是零),所以它是布尔真值

第二:true+[]

将两者转换为字符串,使“true”+“为true”

第三:![]

!![]是布尔值false,因为对象/数组始终为thruty

第四:“真”+假

将布尔值false转换为字符串,使“true”+“false”为“truefalse”


“truefalse”。长度为9

。您可以在此处查看完整列表:如果您尝试登录
,您将更接近于回答自己的问题+[]+[]+![]
…然后记录
+[]
,然后
+[]+[]
…(一些用户不断投票“有趣”的问题。一些“好”的问题不会被投票。这不是一件好事。你的投票有很大的影响,请小心使用)