为何Chrome DevTools中比较{}时会抛出错误?
为什么Chrome DevTools执行
{} === {}报错,Node环境却正常? 核心原因是两者的代码解析模式不同:
- Chrome DevTools控制台默认以语句模式解析输入:开头的
{}会被识别为空语句块(类似if(){}里的代码块结构),而非对象字面量。此时{} === {}会被解析成(空语句块) === {},不符合JavaScript语法规则,因此抛出语法错误。 - Node环境默认以表达式模式解析输入:它会把整段输入当作一个表达式处理,开头的
{}会被识别为对象字面量。{} === {}本质是比较两个独立创建的对象的引用地址,由于JS中对象是引用类型,两个新对象的内存地址不同,因此会返回false。
验证方法
在Chrome DevTools里如果想让{}被当作对象字面量解析,只需把代码包裹在括号中,强制控制台以表达式模式处理:
({} === {}) // 返回 false
内容的提问来源于stack exchange,提问作者Matthieu Riegler
相关产品推荐
相关产品推荐

