通过什么逻辑js
起作用(!+ [] + [] +![])。length返回9?那怎么可能?
据我所知,js具有动态类型转换,但是很难理解这里发生了什么
console.log((!+[]+[]+![]).length);
答案 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