【问题标题】:JavaScript Expression [duplicate]JavaScript 表达式 [重复]
【发布时间】:2014-10-20 13:12:06
【问题描述】:

谁能帮我解决这个 JavaScript 表达式?

+[[+!![]]+[+![]]+[+!![]]+[-~!![]+-~!![]-~!![]]+[-~!![]]+[+![]]+[+!![]]+[-~!![]+-~!![]]]

朋友发给我,让我复制粘贴到浏览器控制台中。

这是结果:

10162014

如果有人可以向我解释这一点,或者至少请我指出正确的参考资料。谢谢!

【问题讨论】:

标签: javascript


【解决方案1】:

首先将您的代码分解为:!![] 返回 true(!! 是转换为布尔值),现在 + 转换为数字,因此 +!![] 返回 1。

![] 转换为 false,因此 +![] 返回 0。

~[] 返回-1~![] 也返回-1

~!![] 返回-2

现在,-~!![] 返回 2-~![] 返回 1。

因此,将它们全部组合会返回 10162014。

你要知道的都是~, !, +, & -

【讨论】:

    【解决方案2】:

    ![] = false; # 作为表达式,由于 ! 运算符,它是错误的 [] = true;#作为一个表达式,它被定义了,所以它是true

    +!![] = 1; 因为+true = 1; +![] = 1; 因为+true = 0,因为在 JS 中使用 + 运算符会将布尔值转换为整数引用

    所以他所做的基本上是使用booleaninteger的转换,以及一些分组来构造一个数值。

    【讨论】:

      【解决方案3】:

      [+!![]]+[+![]]+[+!![]]: [] 是一个空数组,这是真的。因此![] 为假,!![] 为真。 +true 将其强制为一个数字,如 1。对于+![]0 通过false 类似。

      [-~!![]+-~!![]-~!![]]~ 是二进制补码运算符; ~1-2。因此,计算结果为-(-2)+-(-2)+-(-2),即6

      其余的加数类似。

      array + array 将数组转换为字符串;因此[1]+[0]+[1]+[6]... 将给出字符串"1016..."

      开头的加号会将其转换为数字。

      【讨论】:

        猜你喜欢
        • 2020-08-23
        • 1970-01-01
        • 2012-06-02
        • 2014-12-26
        • 2017-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多