`2 == {}`和`{} == 2`有什么区别

时间:2018-08-09 08:38:20

标签: javascript equality

当我在Chrome开发人员工具上键入2 == {}时,它将返回false,但是当我键入{} == 2时出现错误Uncaught SyntaxError: Unexpected token ====到底做了什么?

4 个答案:

答案 0 :(得分:5)

{在语法上是模棱两可的。它用于表达式(对象文字语法,{foo: 42, bar: "hello"})和语句(块,{ foo(); bar(); baz(); })中。

如果{出现在语句的开头,则始终将其解析为块的开头。

因此

{} == 2

解析为

{
    // empty block
}
== 2  // syntax error

另一方面,在2 == {}中,{出现在表达式的中间,并被视为对象。

这也是使{} == 2工作的方式:只需确保{不是第一个令牌,您可以通过例如写({}) == 2({} == 2)

答案 1 :(得分:0)

您可以将其括在括号中以区别于block statement。然后您会得到一个epression

({} === 2)

答案 2 :(得分:-1)

如果您使用JavaScript编写{},则表示对象。您可以使用大括号{}声明对象。 因此{} == 2或2 == {}是相同的。在这种情况下,两个陈述都返回false。

答案 3 :(得分:-1)

在javascript中,对象是内存中的值,由标识符引用。
可以将原始值与其他类型进行比较,但是当您尝试比较未声明的对象时,由于没有标识符,因此无法对其进行比较。如果您首先声明它:

var object ={};
object == 2;

这将返回false,因为现在有一个被引用对象的标识符。当您不声明它时,它充当一个块。