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