gpt4 book ai didi

JavaScript BlockStatement 混淆

转载 作者:数据小太阳 更新时间:2023-10-29 05:50:39 25 4
gpt4 key购买 nike

{1 + ''} + 10 // 10
{1 + ''} + '' // 0

为什么会这样? BlockStatements 是否返回 0,为什么?

最佳答案

Do BlockStatements return 0...?

不,blocks返回其中最后一个表达式的值。您可以通过以下操作看到这一点:

{1 + 8}

...在 JavaScript 控制台中,将显示 9

{1 + ''} + 10 // 10
{1 + ''} + '' // 0
Why does this happen?

因为尽管该 block 确实返回了一个值,但并未使用该值。 {1 + ''} + 10//10 代码被评估为两个不同的项目:

{1 + ''} // "1"
+10 // 10

...或使用标准缩进和分号书写:

{
1 + '';
}
+10;

...您看到的是第二个的结果,就好像第一个根本不存在一样。 + 没有加法运算符,它是 unary + (类似于 unary - ,但它不会改变其操作数的符号)。 +10 当然是 10;并且 +''0 因为将运算符应用于字符串会将字符串转换为数字,而 Number('')0

您可以通过尝试以下操作来证明您看到的是一元 + 而不是加法运算符:

{1 + ''} * 10

...这是真的

{
1 + '';
}
*10;

它因语法错误而失败,因为没有一元 *

正如 Felix 在下面的评论中善意指出的那样,您示例中的 + 是加法运算符 (在您的情况下,它最终会连接字符串),它必须是 between two expressions ,一个 block 是一个statement ,不是 expression .

关于JavaScript BlockStatement 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9803597/

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