为什么javascript中数组表示法之前的加号返回零

asi*_*haq 3 javascript

我试图在javascript中理解以下代码的重要性:

alert(+[]);
Run Code Online (Sandbox Code Playgroud)

显示0

这有什么名字吗?涉及哪些概念?

kyb*_*kos 6

前缀位置的加号只能对数字起作用,因此它会将其参数"强制"为数字.空数组不是数字,不能直接转换为数字,因此首先强制转换为它的字符串表示形式(与.toString()相同),即"",然后将""强制转换为数字被定义为零.你也可以用+""+[0]或做同样的事情+[[[["0"]]]].它不仅仅是一个加号,你可以在许多情况下获得数字强制(大多数算术运算符),它们都将[]视为0.

你可以得到一些涉及数组的混乱强制,因为当它们被转换为字符串时,它们没有围绕它们的方括号,所以嵌套在另一个数组中的数组具有相同的字符串表示,因此最终成为相同的数字.

我喜欢在这些情况下给出的标准示例是[["\t\n 987654321e-432"]].是的,如果你把它粘在一个算术表达式(例如if ([["\t\n 987654321e-432"]] == 0) {alert('strange huh?')})中,它将强制为0 ,尽管它在任何地方都没有.这是因为双重嵌套数组中的字符串强制为一个有效的数字,该数字太小而无法用javascript编号表示,因此它会四舍五入为0.还显示了数字强制的字符串也忽略了初始空格的事实.