为什么JavaScript中在数组符号前加加号会返回零

8

我试图理解以下javascript代码的意义:

alert(+[]);

显示为0

这个有什么专业术语吗?都涉及到哪些概念?


可能是[为什么++[[]][+[]]+[+[]] =“ 10”?](https://dev59.com/uWw05IYBdhLWcg3wfx80)的重复问题。 - GSerg
1个回答

9
前缀位置的加号只能用于数字,因此它将其参数“强制”转换为数字。空数组不是数字,不能直接转换为数字,因此首先将其强制转换为其字符串表示形式(与.toString()相同),即“”,然后将“”强制转换为数字,该数字被定义为零。您也可以使用+""、+[0]或+[[[["0"]]]]来做同样的事情。不仅仅是加号,在许多情况下,您都可以获得数值强制转换(大多数算术运算符),所有这些运算符都会将[]视为0。
数组涉及到一些混乱的强制转换,因为当它们转换为字符串时,它们周围没有方括号,因此嵌套在另一个数组中的数组具有相同的字符串表示形式,因此最终成为相同的数字。
我喜欢在这些情况下给出标准示例 [["\t\n 987654321e-432"]] 。是的,如果您将其放入算术表达式中(例如if ([["\t\n 987654321e-432"]] == 0) {alert('strange huh?')}),它将强制转换为数字0,尽管其中没有任何零。这是因为双重嵌套数组中的字符串强制转换为一个小于javascript数字表示的有效数字,因此被四舍五入为0。该字符串到数字的强制转换也忽略了初始空格。

我们能否扩展这个表达式,使其可以返回多于0的值? - asim-ishaq
@asim-ishaq,“more”是什么意思? - phant0m
你在寻找什么?一个不同的数字吗? - kybernetikos
3和4中哪个更大? - asim-ishaq
你可以通过在0前面加上!,并通过对其执行加法将结果的假强制转换为数字,然后将它们相加来将0变成1。因此,!+[]+!+[]+!+[]+!+[]的值为4。 - kybernetikos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接