gpt4 book ai didi

javascript - 明确的增量和添加错误的结果

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

在研究 JavaScript 语法时,我突然发现以下代码会在 SpiderMonkey 和 V8 引擎中抛出错误:

var a = 1, b = 1;
a++++b;

这对我来说很奇怪,因为下面的代码工作得很好:

var a = 1, b = 1;

a+++b; // = 2; (Add a and b, then increase a)
// now a == 2 and b == 1

a+++-b; // = 1; (add a and -b, then increase a)
// now a == 3 and b == 1

此外,以下是无意义的代码:

var a = 1, b = 1;
a++ ++b; // throws an error

我现在的论点是,如果 a+++b 等价于 a++ + b,而不是 a+++b,而a+++-b等价于a++ + -b,则a++++b只能解释为a++++b 以使其成为有效的 JavaScript 代码。相反,引擎坚持 a++++b 被解释为 a++++boperator precedence .

这对我来说与引擎使用 / 符号实现的逻辑形成对比,as explained here , 以区分除法和正则表达式。一个例子

var e = 30, f = 3, g = 2;

e/f/g; // == 5

e
/f/g; // == 5

/f/g; // is equivalent to new RegExp("f","g")

这里的论点是因为/f/g在最后一行作为除法没有意义,所以被解释为正则表达式。

显然 / 符号得到特殊处理,以区分除法和正则表达式。但是为什么 ++-- 也没有得到特殊对待呢? (即外运算符优先)

第二个问题是为什么当代码有多个有效解释时不调用运算符优先级。

最佳答案

在代码 a++++b 中,您有两个不同的语句:a++++b 没有任何东西可以组合它们。 a++++b 上下文中的 + 运算符实际上是一个类型转换器(用于将字符串转换为数字)并且具有不同的 order of precedence。它跟在列表中的其他项之后。

关于javascript - 明确的增量和添加错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41791501/

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