gpt4 book ai didi

带有字符串和索引的 JavaScript 类型强制

转载 作者:行者123 更新时间:2023-11-30 06:59:11 25 4
gpt4 key购买 nike

在下面的代码片段中,为什么 whatDoesItDo() 函数将“fail”作为字符串返回?如果有人可以解释这种行为背后的概念,那将会很有帮助。

function whatDoesItDo() {

return (![] + [])[+[]] + (![] + [])[+!+[]] +
([![]] + [][
[]
])[+!+[] + [+[]]] + (![] + [])[!+[] + !+[]];

}

function result() {

document.getElementById("result").innerHTML = whatDoesItDo();

}

result();
<html>

<body>
<p id="result"></p>
</body>

</html>

最佳答案

您将看到 A) 类型强制转换、B) 使用 [] 对字符串进行索引以及 C) 字符串连接的效果。

让我们先看一下:

(![] + [])[+[]]

![] 给我们 false 因为 [] 是一个强制为 true 的“真实”值当作为 bool 值测试时,![]false

然后我们向它添加 [],这会将它们都变成字符串,因为如果它们中的任何一个不是数字,+ 运算符会将其两个参数强制转换为字符串(如果两者都是数字,它会相加),给我们 "false"(因为 [].toString()[].join()"").

所以现在我们有了 "false"

然后,+[]0,因为它将空数组强制转换为一个数字,使其成为一个字符串 (""), +""0

最后,该值用于 “false”:“false”[0]“f”。

依此类推,其余部分只是该主题的变体。 (!+[]true,稍后很重要。)

关于带有字符串和索引的 JavaScript 类型强制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30875019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com