为什么 JavaScript 中 [] == ![] 为 true? [复制]

2024-04-07

var arr = [];
Boolean(arr) // true
Boolean(!arr) // false
arr == arr // true
arr == !arr // true ??? what ???

我不想得到“推荐使用”的答案===代替=='。 我想了解一下这种现象的原因以及JavaScript的类型转换原理。


JS 中的类型转换,特别是在松散相等方面,是一个棘手的问题。

在回答“为什么这个特定的松散平等以这种方式评估”这个问题时,最好的起点总是咨询该表按操作数类型进行相等比较 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using.

在这种情况下,我们可以看到对于[] == false,操作数 A 是一个对象,操作数 B 是一个布尔值,因此实际执行的比较将是ToPrimitive(A) == ToNumber(B).

右边很简单;ToNumber(false)评估为0。完成了,完成了。

左侧比较复杂;你可以检查官方 ECMAScript 规范 https://tc39.github.io/ecma262/#sec-toprimitive的完整文档ToPrimitive,但你真正需要知道的是,在这种情况下,它归结为A.valueOf().toString(),在空数组的情况下只是空字符串""

所以,我们最终评估了平等性"" == 0。字符串/数字==比较执行ToNumber在绳子上,并且ToNumber("") is 0,所以我们得到0 == 0,这当然是true.

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

为什么 JavaScript 中 [] == ![] 为 true? [复制] 的相关文章

随机推荐

  • 使用heroku上传文件

    据我所理解heroku http heroku com不允许存储单个 Rails 应用程序的上传文件 在他们的文档中 他们提到文件可以上传到亚马逊S3 http aws amazon com s3 实例 我目前没有 S3 帐户 因此假设我只
  • 使用 CLI 通过 docker-compose 部署到 Azure 时,访问代理页面时超时

    I have docker compose file version 3 services app2 image kamilwit dockerdocker app2 container name app2 build context ap
  • 设置标题和 v7 抽屉切换之间的间距

    我现在正在使用 v7 支持库的 ActionBarDrawerToggle 但抽屉图标直接位于标题字体处 因为我禁用了 showHomeEnabled 如何在标题和切换开关之间设置更多可用空间 Thanks 事实上 遗憾的是这并不能真正实现
  • Java中的并发排序

    我目前正在开发一个同时对字符串进行排序的程序 我的程序接收一个文件 将文件的每一行读入一个数组 并将字符串数组拆分为更小的字符串数组 然后 程序为每个较小的数组启动一个线程 并对它们进行快速排序 一旦每个线程完成对其数组的排序 主线程就会从
  • C# 和 WCF 中具有存储库模式的 Web 服务?

    任何人都可以确认将存储库模式与 Web 服务集成的最佳方法吗 实际上我的存储库模式现在在 C 中工作 我有 3 个项目 DataAccess Services 和我的表示层 问题是我的表示层有很多东西 我有一个 ASP NET MVC 站点
  • Nginx 上传进度模块与 Rails 和 Passenger

    我一直在尝试使用 Rails 和 Passenger 在 WebFaction 上运行 Nginx 上传进度模块 使用 Paperclip 上传到 S3 到目前为止 我得出的最好结果是它报告开始和结束 但没有报告中间的情况 对 progre
  • 使用正则表达式提取 URL

    我已经搜索了至少 2 小时 但找不到任何使用正则表达式提取以下 URL 的模式 我采用了很多文章中描述的太多模式 但我找不到有用的东西 例如 URL 类似于以下模式 http google com http www google com h
  • JavaScript 中的对象如何实现 Event 接口

    In this MDN 中的 addEventListener https developer mozilla org en US docs Web API EventTarget addEventListener listener 当指定
  • 防止刷新浏览器后重新提交提交

    下面的代码一切都很好 在名为submit php 的文件中 用户可以通过表单输入提交内容 该表单转到submit2 php 其中一些代码将提交内容插入MySQL 数据库 到目前为止 一切都很好 问题是这样的 一旦用户登陆submit2 ph
  • Bash 脚本:在curl JSON Post 数据中使用字符串变量

    我想发送一个 json 请求并在发布数据中嵌入一个变量 我做了一些研究 然后想出了变量周围的单引号 bin bash FILENAME media file avi curl i X POST H Content Type applicat
  • 主题分支中的“git rebaseupstream-branch”发生致命错误

    当我尝试将上游分支变基为主题分支时遇到问题 工作流程是这样的 git checkout upstream git pull origin upstream git checkout topic git rebase upstream 结果如
  • 未捕获的类型错误:$(...).datepicker() 不是函数

    我正在尝试使用 jQuery datepicker 函数 但收到错误Uncaught type error datepicker is not a function 我检查了我的文件 没有看到对 jQuery 的双重引用或文件顺序不正确ap
  • 如何平衡Web服务器带宽使用?

    我有一个 drupal 商务网站 用户一直在其中上传大量图像 每个商业订单有 n 个图像 我想平衡网络流量以节省带宽 每个服务器的带宽是有限的 我无法使用传统的负载平衡解决方案 因为平衡器服务器的带宽也有限 我的数据库将位于单独的服务器上
  • Ubuntu psql:无法连接到服务器

    我本地安装了 postgresql 正如我所得到的 它不会启动 psql could not connect to server No such file or directory Is the server running locally
  • 插页式广告后 Exoplayer 播放错误

    我正在使用 ExoPlayer 播放视频并显示 Google AdMob 插页式广告 广告消失后 播放视频时出现问题并显示错误 例如 Playback error com google android exoplayer2 ExoPlayb
  • 为什么我们应该在 Android 中使用 sp 来表示字体大小? [复制]

    这个问题在这里已经有答案了 可能的重复 android中px dp dip sp的区别 https stackoverflow com questions 2025282 difference of px dp dip and sp in
  • 从曲线形状中获取均匀分布的点

    如何采用在曲线上有更多点创建的形状并将其细分 以使点沿曲线分布更均匀 在我的研究中我认为numpy s interp https numpy org doc stable reference generated numpy interp h
  • Elasticsearch - 如何获取文档的流行词列表

    我有一个临时索引 其中包含我需要审核的文档 我想按这些文档包含的单词对它们进行分组 例如 我有这些文件 1 aaa bbb ccc ddd eee fff 2 bbb mmm aaa fff xxx 3 hhhh aaa fff 所以 我想
  • 如何从 rss 字符串中提取图像源

    This is the yahoo news rss feed p a href img src http d yimg com a p ap 20110520 capt 53a8af4c675f421c8b7cba014c589d29 5
  • 为什么 JavaScript 中 [] == ![] 为 true? [复制]

    这个问题在这里已经有答案了 var arr Boolean arr true Boolean arr false arr arr true arr arr true what 我不想得到 推荐使用 的答案 代替 我想了解一下这种现象的原因以