为何JavaScript中交换逻辑与运算符操作数会触发语法错误?
为什么
{} && 1会触发语法错误而1 && {}不会? 这是JavaScript语法解析规则导致的:
- 当
{}出现在代码的开头位置时,会被解析成空代码块(block statement),而非对象字面量。所以{} && 1会被拆解成「一个空代码块」加「&& 1」,这完全不符合语法规范,因此抛出Unexpected token '&&'的错误。 - 但
1 && {}里的{}处于表达式右侧,属于表达式上下文,会被正确识别为对象字面量,逻辑与运算正常执行,最终返回{}。
同样的问题也会出现在逻辑或运算符||上:1 || {}能正常返回1,但{} || 1会触发相同的语法错误。
如果想让开头的{}被当成对象处理,只需把它包裹在括号里,强制进入表达式上下文:
({} && 1) // 返回1 ({} || 1) // 返回{}
内容的提问来源于stack exchange,提问作者Prakhar Tripathi
相关产品推荐
相关产品推荐

