Javascript 和自动分号插入

标签 javascript parsing

test262测试套件有 test包含来源:

var x=0, y=0;
var z=
x
++
++
y

注释说:

Since LineTerminator(LT) between Postfix Increment/Decrement Operator(I/DO) and operand is not allowed, two IO(just as two DO and their combination) between two references separated by [LT] after automatic semicolon insertion lead to syntax error

为什么这段代码会导致语法错误?我认为这是一个有效的代码片段。上面的代码等于 var z=x;++++ y;。表达式 ++++ yallowed通过 JavaScript 语法。那么问题出在哪里呢?

最佳答案

这段代码将变成:

var z = x;
++ ++ y;

++++ y 是问题的根源。让我们看看为什么......

++++ y 的计算结果为 ++(++y)。第一步是评估 (++y)++ 运算符递增其旁边的变量引用的值,并返回递增后的值。这里重要的部分是它不返回引用,只返回一个值。因此第二步将是 ++(1)(或任何 ++y 产生的结果),这是一个错误,因为只有引用可以递增。

关于Javascript 和自动分号插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325011/

相关文章:

javascript - 仅当相同的 div 不存在时才生成并附加数据

c++ - 如何使用 asn1c 生成的代码解码 MAP 调用消息

c# - 对泥浆/交互式小说解析器应该采用的方法感到困惑

java - 使用 Java 中的自定义对象实现将 XML 解析为 DOM 树

java - 将 Univocity 解析器与 Spring Batch 结合使用

javascript - Jsrasign,将公钥加载到RSAKey()中?

javascript - 表单提交按钮 onclick 不调用我的 JS 函数

javascript - 如果邮政编码以 ?? 开头,则需要支付运费Javascript 或 PHP

javascript - 无法理解 History.js,需要简化吗?

c# - Sprache 解析器和字符转义