以下代码警告"n".这段代码是如何工作的?
alert(([]+[][1])[[[+!-[]][0]]])
Run Code Online (Sandbox Code Playgroud)
所以,它提醒([]+[][1])[[[+!-[]][0]]].
让我们打破这个:
-[] // -0 (Apparently -`array` == -0)
!-[] // true (Boolean NOT on -1 == true)
+!-[] // 1 (+ casts `true` to a number (1))
[+!-[]] // [1] (add array brackets) (wow that's cheap)
[+!-[]][0] // 1 (get 1st element of the array)
[[+!-[]][0]] // [1] (add array brackets)
[] // [] (Empty array)
[][1] // "undefined" (empty string @ 1 == undefined)
[]+[][1] // "" (undefined + array == undefined)
([]+[][1]) // "undefined"
"undefined"[[1]] // "n" (Get the character at zero-indexed position `1`)
([]+[][1])[[[+!-[]][0]]] // "n"
Run Code Online (Sandbox Code Playgroud)
访问数组时,额外的方括号无关紧要:
[1][[[[[[0]]]]]] === [1][0] === [1]["0"] === 1;
Run Code Online (Sandbox Code Playgroud)
这是因为,在幕后,提供的索引将转换为字符串:
[[[[[0]]]]].toString() === "0";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |