JavaScript中dictionary.has("key")失效仅非undefined判断可用是什么原因
问题原因分析
核心问题是你混淆了普通JavaScript对象与Map实例的API:
has()是Map类型的专属内置方法,仅可通过new Map()创建的实例调用- 你代码中使用的
dictionary是通过{}创建的普通字面量对象,本身不存在has方法,直接调用会触发报错或返回不符合预期的结果
你现有判断逻辑的潜在问题
你目前使用的dictionary["key"] != "undefined"判断方式存在两处明显缺陷:
- 你错误对比了字符串
"undefined"和原始值undefined,如果目标键存在但值恰好为字符串"undefined",该判断会返回错误的阴性结果 - 如果目标键存在但值为
null、0、''、false等假值,宽松相等的规则也会导致判断误判
普通对象判断属性存在的标准写法
针对普通字面量对象,判断属性是否存在有两种通用标准方案:
- 仅检查对象自身属性(不遍历原型链):使用
Object.prototype.hasOwnProperty()
示例:dictionary.hasOwnProperty('key') - 同时检查自身属性与原型链继承属性:使用
in操作符
示例:'key' in dictionary
不同字典实现的用法对比
// Map 类型正确用法 const mapInstance = new Map() mapInstance.set('testKey', 'testVal') console.log(mapInstance.has('testKey')) // 输出 true // 普通对象用法 const plainObject = { testKey: 'testVal' } // plainObject.has('testKey') 会直接抛出类型错误:has不是该对象的方法 console.log(plainObject.hasOwnProperty('testKey')) // 输出 true console.log('testKey' in plainObject) // 输出 true
内容的提问来源于stack exchange,提问作者that_javascript_girl
相关产品推荐
相关产品推荐

