亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試刪除不允許的屬性時引發錯誤

嘗試刪除不允許的屬性時引發錯誤

慕哥9229398 2021-04-08 14:15:22
因此,我知道您可以通過將configurable對象的屬性設置為來防止屬性被刪除false。但是,您從此delete操作中獲得的唯一反饋是顯示為true或false的布爾值。當刪除不允許的屬性時,有什么方法可以立即引發錯誤?const obj = {  deleteMe: "Some text",  dontDeleteMe: "Some other text"};Object.defineProperty(obj, 'dontDeleteMe', {    value: "Some text",    writable : true,    enumerable : true,    configurable : false});console.log(Object.keys(obj));delete obj.deleteMe;console.log(Object.keys(obj));delete obj.dontDeleteMe;console.log(Object.keys(obj));
查看完整描述

3 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

如果添加,將引發錯誤use strict:


'use strict';

const obj = {

  deleteMe: "Some text",

  dontDeleteMe: "Some other text"

};


Object.defineProperty(obj, 'dontDeleteMe', {

    value: "Some text",

    writable : true,

    enumerable : true,

    configurable : false

});



console.log(Object.keys(obj));

delete obj.deleteMe;

console.log(Object.keys(obj));

delete obj.dontDeleteMe;

console.log(Object.keys(obj));

帶代理:


const obj = {

  deleteMe: "Some text",

  dontDeleteMe: "Some other text"

};


Object.defineProperty(obj, 'dontDeleteMe', {

    value: "Some text",

    writable : true,

    enumerable : true,

    configurable : false

});


const handler1 = {

  deleteProperty(target, prop) {

    delete target[prop];

    if (target[prop]) {

      throw new Error(`Invalid attempt to delete '${prop}' property`);

    }

    return true;

  }

};


const proxyObj = new Proxy(obj, handler1);

console.log(Object.keys(proxyObj));

delete proxyObj.deleteMe;

console.log(Object.keys(proxyObj));

delete proxyObj.dontDeleteMe;

console.log(Object.keys(proxyObj));


查看完整回答
反對 回復 2021-04-22
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

如果您不想使用“使用嚴格”(無論出于何種原因),這將是代理解決方案:


const obj = {

  deleteMe: "Some text",

  dontDeleteMe: "Some other text"

};


const deleteHandler = {

  deleteProperty(target, prop) {

    if (prop in target) {

      const deleted = delete target[prop];

      if (!deleted) {

        console.error(`deletion not allowed: ${prop}`);

      }

    }

  }

};


Object.defineProperty(obj, 'dontDeleteMe', {

  value: "Some text",

  writable: true,

  enumerable: true,

  configurable: false

});


const proxyObj = new Proxy(obj, deleteHandler);


console.log(Object.keys(proxyObj));

delete proxyObj.deleteMe;

console.log(Object.keys(proxyObj));

delete proxyObj.dontDeleteMe;

console.log(Object.keys(proxyObj));


查看完整回答
反對 回復 2021-04-22
  • 3 回答
  • 0 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號