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 中类型转换的灵活性。