首页 > 解决方案 > 为什么在 Chrome 控制台输入 {}==[] 会报错,而 {}=={} 不会报错?

问题描述

{} == []

输出:

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

哪里,

{} == {}

输出

错误的

标签: javascriptgoogle-chrome

解决方案


显然,这是一个“坚持你的第一个想法”的例子!

最后编辑:
如果您{在行首或关闭语句之后使用,JavaScript 模拟器将把这个花括号作为代码块的开头。因此,模拟器将}视为该块的关闭。这意味着它== []独自站在你的代码中间......

将其包裹在圆括号中,模拟器会将其转换为 if 语句,然后{将其视为 in-the-fly-object 的开头。

例如:

({} == []) // => false

编辑:

经过一些快速研究,模拟器失败的情况似乎很少见。

使用 Chrome 71:

如果您在控制台中输入,var a = {}则输出为{}. 因此创建了一个变量 a,创建了一个空对象并将其存储到 a 中。

但是如果你输入var b = []输出是undefined. 这里模拟器搞砸了,因为如果你输入b,输出是[]. 这意味着创建了变量b,创建了一个数组类型的对象并将其存储到b中。但是使用数组字面量创建数组的返回对象是未定义的。

进一步的测试表明我{} == function()会抛出同样的错误:Uncaught SyntaxError: Unexpected token ==.
这让我觉得使用数组文字 ( []) 将返回一个创建数组的函数。

var b = [] // => literal returns a function that will be executed immediately
{} == b // => false because b holds the result of the executed literal-function.


{} == function() // throws error
{} == [] // throws error
var f = function() { --some code-- }
{} == f // throws error


推荐阅读