当我在Chrome开发人员工具上键入2 == {}
时,它将返回false
,但是当我键入{} == 2
时出现错误Uncaught SyntaxError: Unexpected token ==
。 ==
到底做了什么?
答案 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
,因为现在有一个被引用对象的标识符。当您不声明它时,它充当一个块。