如何删除JavaScript对象中动态命名的属性?
问题原因与解决方案
你用Object.create()定义对象属性时,未显式设置configurable: true,该属性默认处于不可配置状态,导致delete操作无法生效。
当通过Object.create()的第二个参数定义属性时,所有属性描述符的默认值都是false,包括configurable、enumerable、writable。只有将configurable设为true,才能允许删除属性、修改属性描述符等操作。
修改后的代码如下:
function addPr() { let p = prop.value; employees = Object.create(Object.prototype, { [p]: { value: val.value, configurable: true // 开启属性可配置性 }, }); console.log(employees); del.addEventListener("click", () => { delete employees[p]; console.log(employees); }); }
如果你只是想快速创建支持删除的普通属性,也可以用更简洁的方式:
function addPr() { let p = prop.value; employees = {}; // 直接创建空对象 employees[p] = val.value; // 赋值方式添加属性,默认可配置 console.log(employees); del.addEventListener("click", () => { delete employees[p]; console.log(employees); }); }
内容的提问来源于stack exchange,提问作者user14411985
相关产品推荐
相关产品推荐

