You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中为何!==可正常工作而===在函数内失效?

问题原因分析

核心问题出在对every方法的逻辑理解上:every会遍历数组所有元素,只有当所有回调函数的返回值都是true时,整个方法才返回true;只要有一个元素让回调返回false,every就会立刻返回false。

用!==的过滤逻辑(变量s)

这段代码的逻辑是:筛选出数组a中,id与数组b里所有元素的id都不相等的项。

  • 比如a中id为4、1的元素,遍历b的所有元素时,它们的id确实和b里的5、6、2、3都不匹配,所以every返回true,这些项被保留下来,符合“找出a中不在b里的元素”的预期。
  • 而a中id为2、3的元素,遍历b时会遇到相同id的元素,此时回调返回false,every整体返回false,这些项被过滤掉,逻辑正确。

用===的过滤逻辑(变量r)

这段代码的逻辑是:筛选出数组a中,id与数组b里每一个元素的id都相等的项。

  • 但b里的元素id分别是5、6、2、3,没有任何一个a的元素id能同时等于这四个不同的值,所以every永远返回false,最终filter的结果就是空数组,这就是它不符合预期的原因。

如果想实现“找出a中存在于b里的元素”

应该把every换成some(some只要有一个元素让回调返回true,就整体返回true),代码如下:

const r = a.filter(({ id: idv }) => b.some(({ id: idc }) => idv === idc));
console.log(r); // 输出 [{id: 2, name: 'John'}, {id: 3, name: 'Matt'}]

内容的提问来源于stack exchange,提问作者Kirubha Kavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:20:32