刪除對象屬性的兩種方式對比

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'))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章