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

时间:2018-06-24 13:39:43

标签: javascript

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

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

2 个答案:

答案 0 :(得分:4)

首先:+ []

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

!+ []为!0(不为零),因此为布尔值true

第二个:true + []

将它们都转换为字符串,因此“ true” +“”为“ true”

第三:![]

![]为布尔值false,因为对象/数组始终是节流的。

第四位:“ true” + false

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

“ truefalse”。长度为9

答案 1 :(得分:1)

首先,我们必须了解!+ [] + [] +![]:

!+[] = !0 = true   
true+[] = "true"
![] = false
"true"+false = "truefalse"

所以!+[]+[]+![]的长度是“ truefalse”的长度,所以它是9