JavaScript Expression
有人能帮我用这个javascript表达式吗?
1
| +[[+!![]]+[+![]]+[+!![]]+[-~!![]+-~!![]-~!![]]+[-~!![]]+[+![]]+[+!![]]+[-~!![]+-~!![]]] |
一个朋友把它发给我,让我把它复制粘贴到浏览器控制台中。
结果是:
一千零一十六万二千零一十四
如果有人能向我解释这一点,或者至少能给我指出正确的参考资料,请。谢谢!
- 这既不是新的也不是新的blog.avast.com/2013/02/14/…hackaday.com/2012/08/13/…
- 首先要记住,true相当于1,false相当于0。另外,如果false转换为布尔值,则为空列表(如[])。
- 我想看看这些问题:stackoverflow.com/search?Q=%5javascript%5d+%22%5b%5d%22
- 参考备忘单
首先,将您的代码分解为:!![],它返回true(!!是转换为布尔值),现在+转换为数字,所以+!![]返回1。
![]转换为false,所以+![]返回0。
~[]返回-1,~![]也返回-1。
~!![]返回-2。
现在,-~!![]返回2,-~![]返回1。
所以,将它们组合起来返回10162014。
你只知道~,!、+、&
![] = false;#作为一种表达,由于!的操作性,它是错误的。[] = true;#作为一种表达,它是定义的,所以它是true的。
+!![] = 1;是因为+true = 1;。+![] = 1;,因为+true = 0,因为在JS中使用+运算符将布尔值转换为整数引用。
所以他所做的基本上是用boolean到integer的转换和一些分组构造一个数值。
[+!![]]+[+![]]+[+!![]]:[]是一个空数组,这是真实的。因此,![]是错误的,!![]是正确的。+true将其强制为一个数字,如1所示。对于+![]和0一样,通过false。
[-~!![]+-~!![]-~!![]]:~是二的补码运算符;~1是-2。因此,计算结果为-(-2)+-(-2)+-(-2),即6。
其余的加数是类似的。
array + array将数组转换为字符串;因此[1]+[0]+[1]+[6]...将给出字符串"1016..."。
开始时的加号将转换为数字。