{} == []
输出:
未捕获的SyntaxError:意外令牌==
位置
{} == {}
输出
false
答案 0 :(得分:0)
显然,这是“坚持您的第一个想法”的示例!
最后修改:
如果在行的开头或在封闭的语句之后使用{
,则JavaScript模拟器会将其花括号作为代码块的开头。因此,仿真器会将}
视为该块的关闭。这意味着== []
独自站在代码中间...
将其包装在圆括号中,模拟器会将其转换为if语句,然后将{
视为飞中对象的开头。
例如:
({} == []) // => false
<罢工> 编辑:
经过一些快速研究,看来这是一种罕见的情况,模拟器会失败。
使用Chrome 71:
如果您在控制台var a = {}
中键入,则输出为{}
。因此创建了一个变量a,创建了一个空对象并将其存储到a中。
但是,如果您键入var b = []
,则输出为undefined
。这里的仿真器很混乱,因为如果您键入b
,则输出为[]
。
这意味着创建了变量b,创建了一个数组类型的对象并将其存储到b中。但是使用数组文字的数组创建的返回对象是未定义的。
进一步的测试表明,{} == function()
会抛出相同的错误:Uncaught SyntaxError: Unexpected token ==
。
这让我认为,认为使用数组文字({{1} })将返回创建数组的函数。
[]
答案 1 :(得分:0)
发生这种情况是因为web
不会被解释为空对象,而是被解释为空块。
javascript中大括号的用法不明确。它既可以用来定义对象,也可以用来定义块。
例如,以下块不会给您任何错误,因为它只是合法的代码块:
network_mode: host
因此,当您键入{}
时,您正在将一个空块与一个空数组进行比较,这没有任何意义。
当您键入{
console.log('hello world!');
}
时,解析器将理解您正在比较两个对象,并且返回false。
我猜这只是因为实现而已,而不是由于规范