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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:15:04