为何浏览器JavaScript中{} - 1的运算结果为-1?
为什么
{} - 1在浏览器和Node环境结果不同? 这是因为两个环境对{}的解析逻辑存在差异:
- 浏览器控制台:
{}会被当作空代码块处理,而非对象字面量。此时整个表达式相当于直接执行-1,自然得到结果-1。 - Node REPL环境:
{}会被解析为对象字面量,严格按照类型转换规则执行:- 先调用
{}的valueOf()方法,返回对象本身(非原始值) - 接着调用
toString()方法,得到字符串'[object Object]' - 尝试将该字符串转为数字时会得到
NaN,NaN - 1的结果还是NaN
- 先调用
如果要在浏览器里让{}被解析成对象字面量,只需给表达式加个括号:({} - 1),此时结果就会和Node环境一致,返回NaN。
内容的提问来源于stack exchange,提问作者Kamil Pilarski
相关产品推荐
相关产品推荐

