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