javascript - 为什么在 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
推荐阅读
- java - 如何在构造函数中强制执行参数顺序 [Java]
- angular - 再次出现 Angular “Http failure response for ... 0 Unknown Error”问题
- javascript - 有没有办法从从第三方网站获取数据的 span + 脚本中添加字体颜色和编辑文本?
- java - 升级到 Spring Boot 2.2.2.RELEASE + Thymeleaf 3.0.11.RELEASE,thymeleaf/layout 停止工作
- android - 通过对话框启用定位服务时,获取最后一个位置不起作用
- javascript - Jquery:如何将事件绑定到具有兄弟姐妹的元素?
- bash - 如何从一个文件的第二列中提取可以在另一个文件中找到的行?
- function - 尝试在 Kotlin 中传递函数参数
- javascript - 通过 Ajax 调用从外部 URL 获取 JSON 数据
- google-compute-engine - Google Compute Engine 运行状况检查停止工作