为什么在控制台中将==的参数换向会更改输出?

时间:2018-06-22 11:19:57

标签: javascript equals-operator browser-console

如果我打开浏览器控制台(在Chrome / Firefox中测试),然后输入:

fs.open

我得到:

  

false

但是,如果我将两个参数都转换为null == {} 运算符,而键入:

==

我得到:

  

未捕获的SyntaxError:意外令牌==

图片:

enter image description here

  • 为什么会这样?
  • 为什么仅在控制台中而不是在浏览器在HTML页面中执行脚本时才会发生这种情况?

编辑:

尽管question 35812626解决了这一问题并在JS将{} == null 解析为代码块时说明了原因,但它使用的是三等号(严格比较)运算符{},而不是双等号{ {1}}。正如用户在下面指出的那样,在代码块之后肯定可以紧跟===,而不会引起语法错误:

==

这怎么起作用,而我的示例不起作用?

2 个答案:

答案 0 :(得分:4)

我认为是因为解释器将{}解释为代码块而不是对象。

所以您的代码{} == null原来是一个块的开始和结束,然后一条语句以==开头,这绝对是语法错误。

但是如果您可以尝试({} == null),我认为它应该可以正常运行。

,正如@dhaker {}=={}指出的,返回false并非错误。

我发现几乎没有方案返回结果,也很少出错。

以下错误:

{}==null //Uncaught SyntaxError: Unexpected token ==
{}==1 //Uncaught SyntaxError: Unexpected token ==
{}==0 //Uncaught SyntaxError: Unexpected token ==
{}==true //Uncaught SyntaxError: Unexpected token ==
{}==false //Uncaught SyntaxError: Unexpected token ==
{}==true //Uncaught SyntaxError: Unexpected token ==
{}=='' //Uncaught SyntaxError: Unexpected token ==
{}=='hi' //Uncaught SyntaxError: Unexpected token ==
{}==(new Object) //Uncaught SyntaxError: Unexpected token ==

以下返回的结果没有错误:

{}=={} //false
{}==function(){} //false

所以我想这与浏览器如何编译或解释Java脚本有关。

有关详细答案,请检查以下答案。

Odd behaviour of comparison of object literals

答案 1 :(得分:3)

我在野生动物园中进行了测试,但事实并非如此。

null是原始变量,null可以位于左侧。

但是用于JavaScript的{}是名称空间。用于创建全局对象。

答案很简单:将{}与等号运算符一起使用是没有意义的。

已更新:

这很清楚:

JavaScript附带的所有内容{没有 分配

让我们说:

{x:null}

以及您将得到什么?

什么都没有。您可以再次访问该对象吗?不。

console.log( null == {} );

console.log( {} == null );

console.log( null === {} );

console.log( {} === null );

// Also 

var object1 = {'key': 'value'}
var object2 = {'key': 'value'};
console.log(object1 === object2); //false

console.log({} === {}); //false

console.log({} == {}); //false

({}) == null; // little hack ;) false

// {} == null; syntax error !

 (typeof {}) == (typeof {});
 
 var A = {};
 var B = {};
 (typeof A) === (typeof B);

// console.log( (A instanceof "object" ) );
console.log( typeof A );

// This is only correct 
console.log(typeof A === typeof B)
console.log(typeof {} === typeof {})

我尝试了这个愚蠢的事情:

  

{'test':0} .hasOwnProperty('test')

并且我得到了相同的职员(语法错误)。不要那样用它!