JavaScript 两个操作数之间多了一个加号或减号运算符

标签 javascript

我不明白下面的代码是如何工作的,有人可以帮助我理解它在 JavaScript 中是如何工作的或者为什么会出现这种行为吗?

  1. 5++++++++++++ 2 = 7 ( 如果运算符之间没有空格,这将给您带来错误。 )
  2. 5++++++++++ + -++ 2 = 3
  3. 5 - - - 1 = 4
  4. 5 - - - + 1 = 4
  5. 5 - - - + - - - - - - 1 = 4
  6. 5 - - - + - - - - - - - 1 = 6。 ( 如果我再添加一个 - 那么这个 6 将变为 4,添加 - 将再次从 46 ... 64)
  7. 5++++++++++ + *++ 2 = 这会给你错误,所以我不能使用多个 * 或者/ 之间的数字。

如果在 JavaScript 中有任何其他像这样的片段/引用/博客/等,请分享。

注意:我已经在 69.0.3497.92(官方构建)(64 位)版本的 google chrome 控制台中测试了所有这些东西

最佳答案

+- 符号既用作二元中缀运算符(加法和减法),也用作一元前缀运算符(一元加号和一元减号)。 ( MDN )

现在,如果您查看运算符的关联性,您会注意到您的表达式等效于以下表达式(显式分组显示关联性):

  • 5 + (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (2)))))))))))<
  • 5 + (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (- (+ (+ 2))))))))))))) )
  • 5 - (- (- (1)))
  • 5 - (- (- (+ (1))))
  • 5 - (- (- (+ (- (- (- (- (- (- (- 1))))))))))
  • 5 - (- (- (+ (- (- (- (- (- (- (- (1)))))))))))

console.log('5 + + + + + + + + + + + + 2 === 5 + (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (2)))))))))))): ', 5 + + + + + + + + + + + + 2 === 5 + (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (2)))))))))))));

console.log('5 + + + + + + + + + + + + - + + 2 === 5 + (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (- (+ (+ 2)))))))))))))): ', 5 + + + + + + + + + + + + - + + 2 === 5 + (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (- (+ (+ 2)))))))))))))));

console.log('5 - - - + 1 === 5 - (- (- (+ (1)))): ', 5 - - - + 1 === 5 - (- (- (+ (1)))));

console.log('5 - - - 1 === 5 - (- (- (1))): ', 5 - - - 1 === 5 - (- (- (1))));

console.log('5 - - - + - - - - - - 1 === 5 - (- (- (+ (- (- (- (- (- (- 1))))))))): ', 5 - - - + - - - - - - 1 === 5 - (- (- (+ (- (- (- (- (- (- (1)))))))))));

console.log('5 - - - + - - - - - - - 1 === 5 - (- (- (+ (- (- (- (- (- (- (- (1))))))))))): ', 5 - - - + - - - - - - - 1 === 5 - (- (- (+ (- (- (- (- (- (- (- (1))))))))))));

如果您删除两个 +- 符号之间的空格(或括号),您将获得 pre-increment 响应。 pre-decrement operator (++, --) 上面的表达式对其无效。

最后一行将导致错误,因为 * 不是一元前缀运算符。


奖励:这是 an article关于博客系列中一些奇怪的 JS 数学内容,该系列的标题恰如其分地称为 JS WTF。 ;-)

关于JavaScript 两个操作数之间多了一个加号或减号运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52419564/

相关文章:

javascript - JQuery Mobile ListView 消失

javascript - javascript 函数 getUTCFullYear() 需要什么?

javascript - Jquery AppendTo 错误

javascript - JavaScript 中 "new Array(..)"和 "[..]"的区别?

javascript - 使用 php/jquery 动态更新单个模态

javascript - 在 React JS 中创建表单后立即提交

javascript - 如何限制1-10 0 auto 生成JavaScript中的一个数字

undefined variable 的javascript错误

javascript - Angular JS ng 文件上传

javascript - 如何替换换行符?