JavaScript比较危机

2024-01-09

我遇到了以下问题,无法理解原因,有人可以解释一下吗?

var foo = [0];
console.log(foo == !foo); // true 
console.log(foo == foo);  // true

第二个比较解释起来很简单:foo等于它本身。

然而,第一个有点棘手:foo是一个数组,它是一个对象,其计算结果为true when 强制为布尔值 http://ecma-international.org/ecma-262/5.1/#sec-9. So !foo is false. But foo比较左侧没有转换为布尔值。在相等比较期间,两个操作数实际上都转换为数字。它的评估方式是这样的:

[0] == false
[0] == 0
"0" == 0
0 == 0
true

根据MDN https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Comparison_Operators,与相等运算符比较==:

如果两个操作数的类型不同,JavaScript 会转换操作数,然后应用严格比较。如果任一操作数是数字或布尔值,则如果可能,操作数将转换为数字

我知道这个解释听起来很肤浅。实际上比这复杂得多,但基本步骤就是我上面列出的步骤。您可以查看 ECMA-262 规范的详细信息,特别是各个部分9 http://ecma-international.org/ecma-262/5.1/#sec-9 and 11.9 http://ecma-international.org/ecma-262/5.1/#sec-11.9.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript比较危机 的相关文章

随机推荐

  • JavaScript 有元组吗?

    我很想知道 JavaScript 中是否有 python 类型元组 我正在开发一个项目 我需要只使用对象列表而不是数组 JavaScript 不支持元组数据类型 但在数组解构的帮助下 可以像元组一样使用数组 有了它 数组可用于从函数返回多个
  • 中继器内的 ASP.NET DataGrid

    我有一个有两列的表 CommunityID PersonID 和一个 人员 表 其中包含 除其他外 FirstName LastName 我想为每个社区显示不同的数据网格 每个数据网格仅包含属于该社区的人员 我想在不使用 4 个单独的 Sq
  • Android 打电话时播放声音

    我想在有人接到电话时播放 Android 手机上的音乐 我可以播放音乐 但对方听不到该音乐 如何让对方听音乐 应该怎样编码才能将音乐播放插入麦克风让对方听到 我收到了关于此功能的不同建议 检查这里是可能的 http forums whirl
  • 芹菜失去心跳(on_node_lost)

    我刚刚升级到 celery 3 1 现在我在我的日志中看到了这个 on node lost INFO missed heartbeat from celery queue name for every queue worker in my
  • jsonconvert.deserializeobject 返回 null

    当用户输入城市和街道等地址的 2 个值 目前 时 我试图从谷歌地图获取坐标 来自谷歌地图 api 的 Json 字符串的反序列化遇到问题 必须非常简单 请帮助我关于我所缺少的 这是 json 字符串 http pasted co d9e7c
  • 如何在 Markdown 中为 Pandoc Beamer 幻灯片指定 YAML 元数据?

    我正在尝试使用 YAML 元数据块来指定 Pandoc 的 Markdown 文档中的一些文档属性 我将其转换为 LaTeX Beamer 我在这里阅读了描述 http johnmacfarlane net pandoc README ht
  • 使用 TableAdapter 重新加载数据

    private void UserList Load object sender EventArgs e TODO This line of code loads data into the workOrdersDataSet users
  • 使用 ES6 import 语句时,有没有办法防止项目未定义?

    import foobar1 foobar2 foobor3 typo this key doesn t exist in the module from module file js console log foobar1 foobar2
  • PHP preg_match_all 在长字符串上失败

    这是我的代码 long str repeat a very long string text 100 try changing 100 to 5000 str lt lt
  • 为什么我的汇编输出位于字母位置? (1+1=b)

    我正在使用塔斯姆 这是一个简单的程序 可以读取用户的输入并将两个数字相加 但是 我的输出是根据字母位置显示字母 例如 3 5 h 8 我希望它以整数显示 model small stack 100h data input db 13 10
  • 如何在 Apache 中集成 Clojure Web 应用程序

    Note 鉴于这个OP是大约两年前写的 我不想再问同样的问题 我想知道是否存在分步说明 以便我可以将Noir或其他Clojure Web应用程序集成到Apache中 无论是Jetty Tomcat 或者是其他东西 Django 也有类似的说
  • angular2快速启动仅显示正在加载..而不显示index.html的内容

    第一次使用 angular2 按照以下说明5 分钟快速入门指南 https angular io docs ts latest quickstart html 对于角度 2 一切正常 意味着运行时没有错误npm start npm 启动镜像
  • 在windows中用纯C创建唯一的临时目录

    我想从一些 C 在 Windows 中创建一个唯一的临时目录 代码 不是 C 或 C 我想这样做 以便我可以放置一些温度 目录中的文件 然后在完成后轻松将它们全部删除 通过递归删除目录 我本质上是在寻找与linux相当的东西mkdtemp
  • 从数据库填充组合框

    我的组合框出现错误 My code SqlConnection conn new SqlConnection try conn new SqlConnection Data Source SHARKAWY Initial Catalog B
  • 使用 Flash IDE 测试电影无法从本地主机加载文件

    我只是想知道是否有人可以帮助我解决我的简单但令人沮丧的问题 我创建了一个 SWF 可以从以下位置加载 XML 文件http localhost flash Projects MEL Quiz Quiz bin xml quiz xml ht
  • 在 WKWebView 中启用应用程序缓存

    我知道 iOS WKWebView 不支持离线应用程序缓存 这是在 Safari 中启用的 所以我在 webkit 项目中搜索了负责的代码并发现了这个 WK首选项 void setOfflineApplicationCacheIsEnabl
  • 使用 Wix 工具集安装应用程序的多个实例

    我只需要安装应用程序的多个实例 将它们保存在不同的文件夹中 桌面上没有快捷方式 换句话说 当应用程序已安装在文件夹中时 如果我再次双击 msi 文件 安装程序不应询问我是否要修复或删除我的应用程序 而只是允许安装它在一个新文件夹中 我怎么解
  • Cache-Control s-maxage 标头是否会覆盖浏览器缓存的 Expires 标头?

    我想设置一个遥远的未来过期标头以减少来自各个浏览器的请求 我还想设置 Cache Control s maxage 600 以便代理缓存 和 CDN 每 10 分钟与源重新验证一次新内容 尽管存在带有 s maxage 指令的 Cache
  • 是否可以使用与 Java 中相同的语法在 Groovy 中使用 JavaFX?

    我使用的是jdk1 8 0 25 我正在尝试运行一个 JavaFX 应用程序文件 在该文件下 当名为 HelloWorldMain java 时 可以使用 javac java 编译并运行正常 我将其重命名为 HelloWorldMain
  • JavaScript比较危机

    我遇到了以下问题 无法理解原因 有人可以解释一下吗 var foo 0 console log foo foo true console log foo foo true 第二个比较解释起来很简单 foo等于它本身 然而 第一个有点棘手 f