Fla*_*ake 1 javascript type-conversion type-coercion
在下面的代码片段中为什么whatDoesItDo()函数返回"失败"字符串?如果有人能够解释这种行为背后的概念,那将会很有帮助.
function whatDoesItDo() {
return (![] + [])[+[]] + (![] + [])[+!+[]] +
([![]] + [][
[]
])[+!+[] + [+[]]] + (![] + [])[!+[] + !+[]];
}
function result() {
document.getElementById("result").innerHTML = whatDoesItDo();
}
result();Run Code Online (Sandbox Code Playgroud)
<html>
<body>
<p id="result"></p>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
T.J*_*der 14
您正在看到A)类型强制的影响,B)使用[]和C)字符串串联索引到字符串.
让我们看看第一位:
(![] + [])[+[]]
Run Code Online (Sandbox Code Playgroud)
![]让我们false因为[]是一个"truthy"的价值,它可以强制以true当作为布尔测试,所以![]是false.
然后,我们添加[]到它,这把它们都转换为字符串,因为+运营商要挟它的两个参数为字符串,如果其中一方不是数字(如果两个都是数字,它增加了),给我们"false"(因为[].toString()是[].join()这是"").
所以现在我们有了"false".
然后,+[]是0因为它将空数组强制转换为数字,这使得它成为一个字符串(""),并且+""是0.
最后,该值用于"false": "false"[0]是"f".
等等,其余部分只是该主题的变体.(!+[]是true,后来很重要.)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |