7

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

null == {}

我得到:

错误的

但是,如果我将两个参数都传递给==运算符,而是键入:

{} == null

我得到:

未捕获的语法错误:意外的令牌 ==

图片:

在此处输入图像描述

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

编辑:

虽然问题 35812626解决了这个问题并解释了 JS 将其解析{}为代码块的原因,但它使用了三等号(严格比较)运算符===,而不是双等号==。正如用户在下面指出的那样,一个代码块肯定可以跟在后面而==不会导致语法错误:

{} == {} // false

这是怎么回事,而我的例子却没有?

4

2 回答 2

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

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

如需更详细的答案,请查看以下答案。

对象文字比较的奇怪行为

于 2018-06-22T11:26:26.300 回答
3

我在 safari 上测试过,这是不正确的。

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

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

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

更新 :

很清楚:

javascript 中带有 { 的任何东西都没有赋值

让我们试着说:

{ x : 空 }

你会得到什么?

没有什么 。你能再次访问这个对象吗?不。

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')

我得到了相同的员工(syntaxError)。不要这样用!

于 2018-06-22T11:30:59.317 回答