JavaScript Expression

JavaScript Expression

本文关键字:Expression JavaScript      更新时间:2023-09-26

谁能帮我这个JavaScript表达式?

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

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

结果如下:

10162014

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

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

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

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

~!![]返回-2 .

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

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

所有关于你知道的是~,!,+和-

![] = false; #作为

表达式,由于操作!,它是假的 [] = true; #作为一个表达式,它是定义的,所以它是true

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

所以他所做的基本上是用boolean来构造一个数值,integer转换,并进行一些分组。

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

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

其余的增补是类似的。

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

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