删除对象属性的两种方式对比

delete操作符

// 变量的直接引用,函数的参数或者函数名使用delete操作,会抛出语法错误
const person = {
    one: '1111',
    two: '2222',
    three: '3333'
}

// 不可配置属性
Object.defineProperty(person, 'four', {value: '4444', configurable: false})

console.log(delete person.three)
console.log(delete person.four) //在严格模式下会报错

// 删除一个不存在的属性,结果为true
console.log(delete person.five)

var nameOther = '123'
// 一个不可设置的属性删除为false(即不能删除
console.log(delete nameOther) //在严格模式下会报错`

reflect.deleteProperty() 函数

const res = {
    one: '1111',
    two: '2222',
    three: '3333'
}
Reflect.deleteProperty(res, 'one')
console.log(Reflect.deleteProperty(res, 'one'))

// 会在target不是对象的时候抛出异常
const noObject = 1
try {
    Reflect.deleteProperty(noObject, 'one')
} catch (error) {
    console.log(error)
}

// Object.defineProperty()基本等同,只是返回是否成功的布尔值
Reflect.defineProperty(res,'four',{
    value:'4444',
    configurable:'false',
})
console.log(res.four)
// 在配置为false的情况下仍然可以删除成功
console.log(Reflect.deleteProperty(res, 'four'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值