我不了解以下代码的工作方式,有人可以帮助我了解它在JavaScript中的工作方式或为什么会这样吗?
5 + + + + + + + + + + + + 2
= 7 (如果运算符之间没有空格,则会给您错误。)5 + + + + + + + + + + + + - + + 2
= 3 5 - - - 1
= 4 5 - - - + 1
= 4 5 - - - + - - - - - - 1
= 4 5 - - - + - - - - - - - 1
= 6 。 (如果我再添加一个-
,则这6个将变成4
,添加-
会将其再次从4
更改为6
... 6
至4
)5 + + + + + + + + + + + + * + + 2
=这将给您带来错误,因此我不能在数字之间使用多个*
或/
。
如果JavaScript中有其他类似的摘要/参考/博客/等,请分享。
NB:我已经在google chrome控制台中测试了所有这些内容-版本69.0.3497.92(正式版本)(64位)
答案 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 。 ;-)