JavaScript报错:Cannot set properties of undefined 问题求助
问题解决:Map中对象动态添加属性报错
报错Cannot set properties of undefined (setting 'context')的核心原因是你通过streams[a]获取到的是undefined,说明a这个键并没有存在于Map中,和对象本身是否预先定义context属性无关。
可能的原因及解决方案:
变量
a的引用/值不一致
Map的键是基于严格相等(===)判断的:- 如果
a是原始类型(字符串、数字等),要确保调用set和后续获取时,a的值完全相同,没有被重新赋值。 - 如果
a是引用类型(对象、数组等),必须保证set和get用的是同一个对象引用。比如你不能先set时用let a = {},之后又把a赋值为另一个对象a = {},这时候两个a是不同的引用,Map会认为是不同的键。
- 如果
正确的操作流程
先通过get方法获取对象,确认存在后再修改属性:var streams = new Map(); // 确保a是固定的引用或值 streams.set(a, { id: 123 }); const targetObj = streams.get(a); // 先判断对象是否存在,避免报错 if (targetObj) { targetObj.context = someNotNullObject; } else { console.error('键a不存在于当前Map中'); }如果是引用类型键的场景,固定引用即可:
// 固定a的引用,不要后续修改它的指向 const a = {}; var streams = new Map(); streams.set(a, { id: 123 }); streams.get(a).context = someNotNullObject; // 正常执行
内容的提问来源于stack exchange,提问作者user3108468
相关产品推荐
相关产品推荐

