【问题标题】:Why does this JavaScript nonsense alert "fail"? [duplicate]为什么这个 JavaScript 废话警报“失败”? [复制]
【发布时间】:2014-06-19 00:05:06
【问题描述】:

我知道这是一个玩笑,但是有人发布了这个并且它在浏览器中警告“失败”,这是怎么回事?

alert((![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]);

【问题讨论】:

  • 有人在 Facebook 上发了,我不知道它来自哪里
  • 无论如何,主要的“技巧”是(![]+[]) 生成一个字符串 - "false" - 然后将其索引为 "false"[+[]] -> "false"[0]" -> "f",等
  • ([]+[][[]]) 产生字符串undefined。这两个字符串提供了获取 fail 所需的一切,并带有适当的索引。
  • 我发现它在严肃的层面上足够有趣,我必须说,让您深入了解编程的可能性
  • 我不认为这不是一个严肃的问题,但我没有意识到之前已经回答过(谢谢 user2864740),由于重复而关闭...

标签: javascript syntax


【解决方案1】:

这是一篇关于这个主题的好博文:http://patriciopalladino.com/blog/2012/08/09/non-alphanumeric-javascript.html

您基本上是创建字符串(“false”、“undefined”等),然后再次使用加法来获取索引。

例如第一个字母(f): (![]+[])[+[]] 您使用![] 来获取false,并添加[] 以将其转换为字符串。括号内的内容现在是“假的”。然后,您可以像访问数组一样访问它,并且 ´+[]` 将转换为 0(作为数字为 false)。

【讨论】:

  • 哇,true 的添加基本上让我大吃一惊。我想知道这种索引是如何工作的……+1
  • @asimes 是的,这是一种非常有趣的编写代码的方式,没人能理解。如果您还没有阅读整篇文章,我会通读
  • 处理中,谢谢
猜你喜欢
  • 2015-02-15
  • 2016-08-27
  • 2018-03-02
  • 2019-12-28
  • 1970-01-01
  • 2018-05-18
  • 2014-01-16
  • 1970-01-01
  • 2017-01-26
相关资源
最近更新 更多