我试图在javascript中理解以下代码的重要性:
alert(+[]);
显示0
这有什么名字吗?涉及哪些概念?
答案 0 :(得分:5)
前缀位置加号只能对数字起作用,因此它会强制执行。它对一个数字的论证。空数组不是数字,不能直接转换为数字,因此首先强制转换为它的字符串表示形式(与.toString()相同),即"",然后""被强制为一个被定义为零的数字。您也可以使用+""
或+[0]
或+[[[["0"]]]]
执行相同的操作。它不仅仅是一个加号,你可以在许多情况下获得数字强制(大多数算术运算符),它们都将[]视为0。
你可以得到一些涉及数组的混乱强制,因为当它们被转换为字符串时,它们周围没有方括号,所以嵌套在另一个数组中的数组具有相同的字符串表示,因此最终成为相同的数字。
我喜欢在这些情况下提供的标准示例是[["\t\n 987654321e-432"]]
。是的,如果你把它放在一个算术表达式(例如if ([["\t\n 987654321e-432"]] == 0) {alert('strange huh?')}
)中,它将强制为0,尽管它在任何地方都没有。这是因为双重嵌套数组中的字符串强制为有效数字太小而无法用javascript编号表示,因此它会四舍五入为0.还会显示数字强制的字符串也忽略初始空格的事实