为何0 === {}可正常执行,而{} === 0会抛出语法错误?
为什么
0 === {}返回false但{} === 0会抛出语法错误? 嘿,这个问题涉及到JavaScript的严格相等规则和语法解析优先级,我来给你拆解清楚:
一、0 === {}返回false的原因
JavaScript的严格相等运算符===有两个核心判断条件:
- 两边的数据类型必须完全相同
- 类型一致的前提下,值也必须完全匹配
0属于Number类型,{}属于Object类型,两者类型完全不同,所以严格相等直接返回false——这里不会像非严格相等==那样做自动类型转换,这是===最关键的特性。
二、{} === 0抛出SyntaxError的原因
这是JavaScript解析器的上下文判断逻辑导致的:
当你在控制台直接输入以{}开头的代码时,解析器会默认把{}识别为代码块(block statement)(比如if、for语句后面用来包裹执行逻辑的代码块),而不是对象字面量。
代码块是用来包裹执行语句的语法结构,它后面不能直接跟===这种运算符,所以解析器会判定这是无效语法,抛出SyntaxError: expected expression, got '==='。
验证这个逻辑的小技巧
如果你把{}放在括号里,强制让解析器把它当成表达式处理:
({}) === 0
这时候解析器会把({})识别为对象字面量,和0做严格相等比较,结果会返回false(依然是因为类型不匹配),不会再报错。
简单总结:开头的{}在语句上下文里是代码块,在表达式上下文里才是对象字面量,控制台默认处于语句上下文,所以才会出现这个语法错误~
内容的提问来源于stack exchange,提问作者Jack M
相关产品推荐
相关产品推荐

