我不明白下面的代码是如何工作的,有人可以帮助我理解它在 JavaScript 中是如何工作的或者为什么会出现这种行为吗?
5++++++++++++ 2
= 7 ( 如果运算符之间没有空格,这将给您带来错误。 )5++++++++++ + -++ 2
= 35 - - - 1
= 45 - - - + 1
= 45 - - - + - - - - - - 1
= 45 - - - + - - - - - - - 1
= 6。 ( 如果我再添加一个-
那么这个 6 将变为4
,添加-
将再次从4
到6
...6
到4
)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/