[英]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.