2015-08-28 2 views
3

Я пытаюсь удалить свойство объекта, но свойство не удаляются вообще ...Javascript удалить object.property не работает

Что у меня есть:

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' return? – vault

+1

Откуда «tagFound»? Если поле пароля выводится из HTML-тега, то оно не может быть удалено. Только пользовательские свойства могут быть удалены. По крайней мере, это так в браузере, но, вероятно, что-то подобное происходит в узле. –

+0

Удалить возвращает true. tagFound происходит из документа mongoDB – rbaprado

ответ

2

Некоторые переменные не могут быть удалены в зависимости от контекста того, как они объявлены. Например, вы не можете удалить переменные, которые были определены в глобальной области.

Ненавижу сообщение о ответе ссылки, но в этом сообщении в блоге описываются все правила и случаи краев с использованием delete. Это совсем немного для меня, чтобы включить в SO размещать

Using delete in Javascript

+0

tagFound объявлен локально, но он исходит из инструкции yield, может быть, это проблема? – rbaprado

+0

@rbaprado Возможно. Откуда появляется tag.findById? Является ли это элементом DOM, который вы пытаетесь удалить? – tier1

+0

tags.findById - это обертка для findOne mongoose, без DOM здесь – rbaprado

1

Это может иметь несколько причин, например, в поле пароля не может быть изменены или поле пароля, поступающие из цепи прототипов.

Вы можете отлаживать это с Object.getOwnPropertyDescriptor(tagFound, 'password');

+0

Он возвращает undefined – rbaprado

+1

Затем он исходит от прототипа. –

-3

Вы можете удалить свойство из объектов JavaScript с помощью delete оператора

удалить myObject.proportyname;

+0

delete - это оператор, а не функция. Поэтому это должно быть 'delete myObject.propertyname' – Rob

Смежные вопросы