T.J*_*der 5 javascript operators operator-precedence
在我能找到的所有JavaScript运算符优先级图表中(如此和此一样),逻辑AND(&&)的逻辑OR()优先级稍高||.
我似乎无法弄清楚结果与它们具有相同优先级时的结果不同的表达式.我认为必须有某种方式使它重要,否则它们会被列为具有相同的优先级,如果它没有.
例如:
0 || 2 && 0 || 3
Run Code Online (Sandbox Code Playgroud)
是的3,但无论我如何分割它,它总是会3:
(0 || 2) && 0 || 3
0 || (2 && 0) || 3
(0 || 2 && 0) || 3
0 || 2 && (0 || 3)
0 || (2 && 0 || 3)
Run Code Online (Sandbox Code Playgroud)
如果我0先做其他事情(比如4),那么结果总是4因为第一个||甚至不看右边.如果我换了0,并3在最近||四周,结果依然3.
我最接近的是
0 || false && "" || NaN
Run Code Online (Sandbox Code Playgroud)
...... NaN然而,是
0 || false && ("" || NaN)
Run Code Online (Sandbox Code Playgroud)
......是false,但我认为这纯粹是从左到右的语义解释,而不是通过&&更高的优先级.
我必须错过它,因为什么表达式&&具有更高的优先级而不是||?
如果它们具有相同的优先级并且是左结合的,那么例如表达式
\n\n1 || 0 && 2\nRun Code Online (Sandbox Code Playgroud)\n\n将会
\n\n((1 || 0) && 2) // evaluates to 2\nRun Code Online (Sandbox Code Playgroud)\n\n而不是
\n\n(1 || (0 && 2)) // evaluates to 1\nRun Code Online (Sandbox Code Playgroud)\n\n我们从“通常”的优先规则中得到的。
\n\n对于您的结构\xe2\x80\xa6 || \xe2\x80\xa6 && \xe2\x80\xa6 || \xe2\x80\xa6(而不是(((\xe2\x80\xa6 || \xe2\x80\xa6) && \xe2\x80\xa6) || \xe2\x80\xa6)正常的((\xe2\x80\xa6 || (\xe2\x80\xa6 && \xe2\x80\xa6)) || \xe2\x80\xa6)),您会得到不同的结果,例如0 0 1 0。
\n\n\n为什么逻辑 AND 的优先级略高于逻辑 OR?
\n
因此,布尔表达式的规范形式(析取范式)不需要任何括号。
\n