JavaScript表达式

JavaScript Expression

本问题已经有最佳答案,请猛点这里访问。

有人能帮我用这个javascript表达式吗?

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

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

结果是:

一千零一十六万二千零一十四

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


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

![]转换为false,所以+![]返回0。

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

~!![]返回-2

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

所以,将它们组合起来返回10162014。

你只知道~,!、+、&


![] = false;#作为一种表达,由于!的操作性,它是错误的。[] = true;#作为一种表达,它是定义的,所以它是true的。

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

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


[+!![]]+[+![]]+[+!![]][]是一个空数组,这是真实的。因此,![]是错误的,!![]是正确的。+true将其强制为一个数字,如1所示。对于+![]0一样,通过false

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

其余的加数是类似的。

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

开始时的加号将转换为数字。