2025-03-02

符文般的JS

0 = [+[]]+[]
1 = [+!+[]]+[]
10 = [+!+[]]+[+[]]
100 = [+!+[]]+[+[]]+[+[]]

1. 0 = [+[]]+[]

  • []​ 是一个空数组。
  • +[]​ 将空数组转换为数字。空数组转换为数字时是 0​,所以 +[]​ 的结果是 0​。
  • [+[]]​ 将 0​ 放入一个数组中,结果是 [0]​。
  • [+[]]+[]​ 将数组 [0]​ 转换为字符串,结果是 "0"​。

最终结果:"0"​(字符串形式的 0​)。


2. 1 = [+!+[]]+[]

  • []​ 是一个空数组。
  • +[]​ 将空数组转换为数字,结果是 0​。
  • !+[]​ 对 0​ 进行逻辑非运算。0​ 是假值,所以 !0​ 是 true​。
  • +!+[]​ 将 true​ 转换为数字,true​ 转换为数字是 1​。
  • [+!+[]]​ 将 1​ 放入一个数组中,结果是 [1]​。
  • [+!+[]]+[]​ 将数组 [1]​ 转换为字符串,结果是 "1"​。

最终结果:"1"​(字符串形式的 1​)。


3. 10 = [+!+[]]+[+[]]

  • +!+[]​ 如前所述,结果是 1​。
  • [+!+[]]​ 将 1​ 放入一个数组中,结果是 [1]​。
  • +[]​ 如前所述,结果是 0​。
  • [+[]]​ 将 0​ 放入一个数组中,结果是 [0]​。
  • [+!+[]]+[+[]]​ 将 [1]​ 和 [0]​ 转换为字符串并连接,结果是 "10"​。

最终结果:"10"​(字符串形式的 10​)。


4. 100 = [+!+[]]+[+[]]+[+[]]

  • +!+[]​ 如前所述,结果是 1​。
  • [+!+[]]​ 将 1​ 放入一个数组中,结果是 [1]​。
  • +[]​ 如前所述,结果是 0​。
  • [+[]]​ 将 0​ 放入一个数组中,结果是 [0]​。
  • [+!+[]]+[+[]]+[+[]]​ 将 [1]​、[0]​ 和 [0]​ 转换为字符串并连接,结果是 "100"​。

最终结果:"100"​(字符串形式的 100​)。


总结

这些代码利用了 JavaScript 中的隐式类型转换和运算符的特性,通过将数组、布尔值和数字相互转换,最终生成了字符串形式的数字。虽然这些代码看起来很复杂,但它们展示了 JavaScript 中类型转换的灵活性。