JavaScript删除对象属性无效。

4

我想删除一个对象的属性,但是这个属性根本没有被删除...

我的代码:

var tagFound = yield tags.findById(this.params.tagId);
debug('prior delete: %j', tagFound);
delete tagFound.password;
debug('after delete: %j', tagFound);

我得到的:

api_v1 prior delete: {"_id":"55e064e9727b44c32a262c0f","expires":"2015-08-29T13:40:57.673Z","password":"$2a$08$hucJyHIU5gholAB1L.wVKeFoTmvFho9xFiJAAvmwmtKphLuJ9Hq4K","type":"free","name":"teste","__v":0,"visible":true,"locations":[{"latitude":65.9667,"longitude":-18.5333,"_id":"55e064e9727b44c32a262c10","timestamp":"2015-08-28T13:40:57.572Z"}]}

api_v1 after delete: {"_id":"55e064e9727b44c32a262c0f","expires":"2015-08-29T13:40:57.673Z","password":"$2a$08$hucJyHIU5gholAB1L.wVKeFoTmvFho9xFiJAAvmwmtKphLuJ9Hq4K","type":"free","name":"teste","__v":0,"visible":true,"locations":[{"latitude":65.9667,"longitude":-18.5333,"_id":"55e064e9727b44c32a262c10","timestamp":"2015-08-28T13:40:57.572Z"}]}

也许是我的眼睛太累了,但我简直想不出这个问题的答案,有人发现我漏掉了什么明显的东西吗?
更新:我把这个放到http://jsfiddle.net/fc8mohwp/里面,问题是,在那里它能正常工作,但在这里(iojs)却不能。应该有什么区别吗?

1
delete 返回什么? - vault
1
tagFound 是从哪里来的?如果密码字段来自 HTML 标签,则无法删除。只有用户定义的属性可以被删除。至少在浏览器中是这样,在 Node 中可能会发生类似的情况。 - Daniele Torino
删除操作返回 true。tagFound 来自 MongoDB 文档。 - rbaprado
对象属性可能不可写。 - Pointy
请删除node.js标签并插入io.js - vault
3个回答

4
根据变量声明的上下文,某些变量无法被删除。例如,在全局范围内定义的变量是无法被删除的。
我不想发布一个链接作为答案,但是这篇博客文章描述了使用delete的所有规则和边缘情况。将其包含在SO帖子中会相当繁琐。 在Javascript中使用delete

tagFound是在本地声明的,但它来自一个yield语句,这可能是问题所在吗? - rbaprado
@rbaprado 可能可以。tags.findById 是从哪里来的?这是你试图删除的 DOM 元素吗? - tier1
1
tags.findById是mongoose的findOne的包装器,这里没有DOM。 - rbaprado
@rbaprado 理解了。那就很难说了。mongoose库可能会做一些奇怪的事情来保护它的对象。您可以尝试通过将其转换为JSON字符串再转回来来进行对象的深拷贝。这样可能允许您声明变量的本地副本,从而使您能够删除它。 - tier1
2
虽然它看起来很丑,但“tagFound = JSON.parse(JSON.stringify(mobtagFound ))”解决了问题,谢谢! - rbaprado

1
这可能有多个原因,例如密码字段无法更改或密码字段来自原型链。
您可以使用Object.getOwnPropertyDescriptor(tagFound, 'password');进行调试。

1
那么它来自原型。 - alexander farkas

-3

你可以使用delete运算符从JavaScript对象中删除属性。

delete myObject.proportyname;


delete 是一个运算符,不是函数。因此应该写成 delete myObject.propertyname - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接