关于javascript:为什么console.log((!+ [] + [] +![])。length)给出9?

Why console.log((!+[]+[]+![]).length) gives 9?

本问题已经有最佳答案,请猛点这里访问。

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

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


第一:+[ ]

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

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

第二:真+[]

将两者都转换为字符串,因此"true"+"为"true"

第三:![]

![]是布尔值false,因为对象/数组总是完整的。

第四:"真"+假

将布尔值false转换为字符串,因此"true"+"false"是"truefalse"

"Truefalse"。长度为9


首先我们要明白!+[]+[]+![]

1
2
3
4
!+[] = !0 = true  
true+[] ="true"
![] = false
"true"+false ="truefalse"

所以EDOCX1的长度(0)是"truefalse"的长度,所以它是9