JavaScript delete操作符删除对象属性相关报错问题咨询
问题排查与解决
首先你给出的原始代码功能逻辑完全正确,对象是引用类型,你将user传入removeName函数时,形参person指向的是同一个内存地址,所以delete person.name会直接修改原user对象,输出{ surname: 'surname' }是符合预期的结果。
两个异常的产生原因
- "Unused parameter person"警告:这是代码静态检查工具(如ESLint、JSHint)的误判,部分检查工具无法识别到通过
delete操作符访问参数属性的使用场景,错误认为person参数没有被使用。 TypeError: Cannot set properties of undefined (setting 'person')报错:你添加的this.person = person属于完全无关的冗余代码。普通函数在严格模式下默认调用时this指向undefined,给undefined设置属性自然会抛出类型错误,你完全不需要加这段代码。
消除警告的解决方案
根据你的使用场景选择即可:
- 练习场景不需要严格符合Lint规范的话,直接忽略该误警即可,原代码无需任何修改。
- 需要消除警告的话,可以加一行无实际运行效果的参数访问,骗过静态检查:
function removeName (person){ person; // 仅用于标记参数已使用,不影响原有逻辑 delete person.name; }
- 也可以通过Lint注释局部关闭未使用参数检查:
// ESLint 环境用这个注释 function removeName (/* eslint-disable no-unused-vars */ person){ delete person.name; }
JSHint 环境对应注释为/* jshint unused:false */。
内容的提问来源于stack exchange,提问作者mixalis petros
相关产品推荐
相关产品推荐

