在 JavaScript 中,数组如何引用到空字符串 + true 中是一个有效字符

How is an array reference into an empty string + true a valid character in JavaScript?

本文关键字:true 字符串 有效字符 一个 何引用 数组 JavaScript 引用      更新时间:2023-09-26

我不确定这一行javascript发生了什么:

alert( (''+[][[]])[!+[]+!+[]] ); // shows "d"

我发现了什么:

var a = ! + []; // == true
var b = ! + [] + ! + []; // == 2

似乎第二部分是对字母数组或某种形式的引用,但我不明白这是怎么来的

(''+[][[]])

也:

alert( (''+[][])[2] ); // nothing happens; console says "unexpected token ]"
alert( (''+[[]][])[2] ); // nothing happens; console says "unexpected token ]"
alert( (''+[[]][[]])[2] ); // shows "d"
alert( (""+true)[2] ); // shows "u"

我会为你分解它:

  ('' + [][[]])[!+[]+!+[]]
= ('' + undefined)[!+[]+!+[]]  // [][[]] grabs the []th index of an empty array.
= 'undefined'[! + [] + ! + []]
= 'undefined'[(! + []) + (! + [])]
= 'undefined'[true + true]
= 'undefined'[2]
= 'd'

这里解释! + [] == true一元正减运算符的重要用途是什么?

因为"" + true是字符串"true",而第三个字符(索引2)是u

! + []这样的事情是有效的,因为+也可以是一元运算符,请参阅此 SO 问题。

alert( (""+true)[2] ); // shows "u"

它返回字符串"true"的第 3 个字母。

这会带来什么回报?

alert( (''+[[]][[]]));