javascript - 这个javascript代码如何/为什么打印 'fun' ?

标签 javascript

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

这是 fiddle :http://jsfiddle.net/leeny/6VugZ/

这段神秘的代码究竟是如何工作的?

最佳答案

        vvvvvvv [0]
(![]+[])[[]-[]]                            = "false"[0]
^^^^^^^^ "false"

                  vvvvvvv again [0]
(([]+[])+([][[]]))[[]-[]]                  = "undefined"[0]
^^^^^^^^^^^^^^^^^^ "undefined"

                  vvvvvvvvv this time [1]
(([]+[])+([][[]]))[!![]-[]]                = "undefined"[1]
^^^^^^^^^^^^^^^^^^ again "undefined"

因此你得到 "f"+"u"+"n"=== "fun"

进一步说明

“假”

![]false+[] 只是作为字符串的转换。因此我们获得了字符串"false"

“未定义”

其中一个操作数必须是字符串。这是由 []+[] 完成的。实际的 undefined 在右侧创建:[][[]] === [][0],第一个条目空数组的 undefined

关于javascript - 这个javascript代码如何/为什么打印 'fun' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15302915/

相关文章:

php - 我应该使用 Javascript 还是 PHP 设置全局变量来唯一标识 Web 应用程序中的每个页面

javascript - 当我在背景图像 div 上应用叠加颜色时,内容会被禁用

javascript - 如何在回调中访问正确的 `this`

javascript - jquery mobile 链接点击两次页面消失

javascript - Angular 未捕获对象

javascript - 如何使用媒体查询删除类

Javascript:如何在 RegEx .exec 结果中获得多个匹配项

javascript json [对象文本]

javascript - KeyDown 事件被调用两次

javascript - 关于 Fetch API 的一个小困惑