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

为什么Map对象可以使用.has()判断键是否存在,却无法使用.includes()?

为什么Map对象可以使用.has()判断键是否存在,却无法使用.includes()?

嘿,我来给你把这个问题说透!

首先得搞明白:不同的JS内置对象,自带的方法是不一样的。你用的includes()是数组(Array)专属的方法,它的作用是检查某个值是不是在数组的元素里;而Map是ES6新增的键值对集合类型,它有自己一套专属的操作方法,has()就是专门用来判断某个键是否存在于Map里的方法。

你看你写的第一段代码,为啥quantWords.includes(word)会失效?因为Map这个类型根本就没提供includes()这个方法,JS引擎找不到这个方法,自然就没法正常工作啦。而第二段代码用quantWords.has(word)就没问题,这完全是踩中了Map的正确用法~

另外顺便提个小细节,你两段代码里的quantWords.set(word, + 1)其实都写错啦!这里应该写成quantWords.set(word, quantWords.get(word) + 1),不然每次只会把值设为1,根本做不到累加统计词频的效果哦,修正后才能得到正确的词频统计结果。

先看你那段用includes()的错误代码:

const sentence = "hello world hello boy";

let words = sentence.split(" ");

const quantWords = new Map();

for (let word of words) {  
    if (quantWords.includes(word)) {
        quantWords.set(word, + 1);
    } else {
        quantWords.set(word, 1);
    }
}
console.log(quantWords);

再看修正了方法(并且修正累加逻辑)的正确代码:

const sentence = "hello world hello boy";

let words = sentence.split(" ");

const quantWords = new Map();

for (let word of words) {  
    if (quantWords.has(word)) {
        // 这里修正为累加现有值
        quantWords.set(word, quantWords.get(word) + 1);
    } else {
        quantWords.set(word, 1);
    }
}
console.log(quantWords);

要是你好奇有没有办法用includes()来实现类似判断?其实可以把Map的键转成数组再用,比如[...quantWords.keys()].includes(word),但完全没必要多此一举,直接用has()不仅代码更简洁,执行效率也更高,毕竟这是Map原生支持的操作。

备注:内容来源于stack exchange,提问作者Edilson Nogueira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:03:10