我正在尝试删除对象属性:
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上阅读了很多关于删除问题的问题,并阅读了大多数提供的典型链接。但我无法找到解决这个简单问题的方法......
答案 0 :(得分:0)
删除对象的动态道具可以这样实现:
function deleteNode(obj, key) {
delete obj[key]
}
有关详细信息,请参阅delete docs。
当有一条"路径"喜欢" a.b.c"您可以使用删除嵌套条目的lodash unset:
var object = { 'a': { 'b': { 'c': 7 } } };
_.unset(object, 'a.b.c');
使用eval
为discouraged。
答案 1 :(得分:0)
var test = {abc: 1};
function deleteNode(_node) {
console.log(delete _node);
}
deleteNode(test.abc);

当您调用上面的deleteNode时,test.abc
在传递给函数之前已经解析为1
。 deleteNode
从技术上讲是delete 1
。根据{{3}},删除函数参数会导致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)