代码之家  ›  专栏  ›  技术社区  ›  rebilliony

为什么是console.log((!+[]+[]+![])长度为9?[副本]

  •  1
  • rebilliony  · 技术社区  · 7 年前

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

    console.log((!+[]+[]+![]).length);
    2 回复  |  直到 7 年前
        1
  •  1
  •   Firemen26    7 年前

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

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

    所以长度 !+[]+[]+![] “真假”的长度是9

        2
  •  4
  •   progysm    7 年前

    第一个:+[]

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

    啊!+[]是!0(不是0),所以这是布尔值true

    第二个:true+[]

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

    第三:![]

    啊![]是布尔值false,因为对象/数组始终是thruty。

    四:“真”+假

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

    “真假”。长度是9