Why console.log((!+[]+[]+![]).length) gives 9?
本问题已经有最佳答案,请猛点这里访问。
用什么逻辑
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