JavaScript在两个操作数之间使用了多个加号或减号

时间:2018-09-20 07:13:49

标签: 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,添加-会将其再次从4更改为6 ... 64
  7. 5 + + + + + + + + + + + + * + + 2 =这将给您带来错误,因此我不能在数字之间使用多个*/

如果JavaScript中有其他类似的摘要/参考/博客/等,请分享。

NB:我已经在google chrome控制台中测试了所有这些内容-版本69.0.3497.92(正式版本)(64位)

1 个答案:

答案 0 :(得分:4)

+-符号既用作二进制前缀运算符(加法和减法),也用作一元前缀运算符(一元加号和一元减号)。 (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))))))))))));

如果删除两个+-符号之间的空格(或括号),您将得到预增量。上面表达式无效的减量运算符++--)。

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


奖金:an article来自博客系列中的一些怪异的JS数学资料,标题为 JS WTF 。 ;-)