如果在同一表达式中使用不同类型的运算符,而不使用括号,那么优先级是什么?
例如,考虑以下示例。为什么它必须来自left-to-right,而不是right-to-left,具有诸如typeof运算符具有right-to-left优先顺序和+具有left-to-right优先等事实。
typeof 99 + 'foo' // 'numberfoo'
typeof (99 + 'foo') // 'string'为什么typeof 99 + 'foo'的输出必须是'numberfoo‘而不是'string’?
任何对文档的引用都会很有帮助。
发布于 2018-04-27 22:37:00
JavaScript中的大多数非赋值表达式(与许多其他语言和数学中的表达式一样)是从左到右计算的,但是表达式中使用的运算符类型可能会改变这一默认行为。
在此示例中要理解的关键一点是, 是JavaScript keyword,,而不是,因此它在操作顺序中占有一席之地。
在第一个示例中:typeof 99 + 'foo'
表达式以typeof 99开头(从左到右)。typeof是从右向左关联的,所以99转到typeof,结果是"number"。
然后,使用+ 'foo' (从左到右)继续进行评估。数字是从左到右关联的,因此“+”和"foo“相互连接,并输出"numberfoo"。
在第二个示例中,您引入了分组操作符(),该操作符更改了操作的正常顺序,并首先对组中的表达式求值。在这种情况下,您有一个number和一个string,它们之间有+运算符。只要有+运算符,并且其中一个操作数是string,另一个操作数就会自动转换为string,因此结果是typeof string,它会生成string。
以下是操作的一般顺序:
有关详细信息,请参见,其中包括一个关联性表格,该表格显示了哪些操作符具有哪些关联性。
https://stackoverflow.com/questions/50064491
复制相似问题