簡體   English   中英

刪除作為函數參數傳遞的對象屬性

[英]Deleting an object-property passed as a function argument

我正在嘗試刪除對象屬性:

var test = {abc: 1};
console.log(delete test.abc); //works fine and returns 'true'

以下構造使我發瘋

function deleteNode(_node) {
  console.log(delete _node);
}

deleteNode(test.abc); // does not work and returns 'false'

為什么? 我閱讀了關於stackoverflow的許多有關刪除問題的問題,並閱讀了提供的大多數典型鏈接。 但是我找不到解決這個簡單問題的方法...

刪除對象的動態道具可以這樣實現:

function deleteNode(obj, key) {
  delete obj[key]
}

有關更多詳細信息,請參見刪除文檔

當具有“ abc”之類的“路徑”時,可以使用lodash unset刪除嵌套的條目:

var object = { 'a': { 'b': { 'c': 7 } } }; 
_.unset(object, 'a.b.c');

不鼓勵使用eval

  var test = {abc: 1}; function deleteNode(_node) { console.log(delete _node); } deleteNode(test.abc); 

當您調用上面的deleteNode時, test.abc在傳遞給函數之前已經解析為1 deleteNode從技術deleteNode是調用delete 1 並且根據ES標准 ,在嚴格模式下刪除函數參數會直接導致false或產生錯誤。

 "use strict"; var test = {a: 1}; function del(a) { console.log(delete a); } del(test.a); 

您將需要將對象作為不同的參數傳遞給方法。

  var test = {abc: {a: 1, b: 2, c: {d: 1}}}; function deleteNode(obj, key) { console.log(eval('delete obj.' +key)); } deleteNode(test, 'abc.c.d'); console.log('test is', test) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM