2017-02-11 12 views
0

Может ли кто-нибудь объяснить мне, почему приведенный ниже код (объект, объект)?
(console.log (dope) дает то, что должно, но после JSON.stringify и JSON.parse он просто говорит object, Object). Если бы вы могли сказать мне, почему это так, это было бы здорово.JSON return (object, Object)

var nombrememes = document.getElementsByClassName("meme").length; 
var memenumber = nombrememes + 1; 

var newmeme = prompt('Please paste the link of the meme below!'); 
memes.push ('placememe'+memenumber+''); 

var div = document.createElement('div'); 
document.body.appendChild(div); 
div.id = 'placememe'+memenumber+''; 
div.className = 'meme'; 
div.innerHTML = '<img src="'+newmeme+'" width="700" height="700" alt="" />'; 


var dope = document.getElementById('placememe'+memenumber+''); 
console.log(dope); 
localStorage.setItem('dope', JSON.stringify(dope)); 
var pla = JSON.parse(localStorage.getItem('dope')); 
alert(pla); 
+0

Если вы говорите о 'alert', это потому, что он действительно не знает, как его просматривать (как объект JSON), поэтому он возвращает его как строку –

+0

Попробуйте оповещение (JSON.stringify (pla)); –

+0

'alert' не является инструментом отладки! Если вы выполните 'console.log (pla)', вы видите, чего вы ожидаете. –

ответ

1

Это происходит потому, что после того, как JSON.parse вы теперь имеете дело с объектом JavaScript.

IE, когда вы делаете {}.toString(), вы не вернетесь '{}' вы вернетесь [object Object], который является тем, что возвращает Javascript для строкового представления объекта. Вот почему JSON.stringify() необходим для преобразования объекта Javascript в JSON.

Если вы хотите получить строку для вашего предупреждения, просто просто оставьте значение, исходящее из localStorage, в виде строкового представления.

var pla = localStorage.getItem('dope'); 
alert(pla); 
0

Это не сработает. См. this question. Вы пытаетесь сериализовать узел DOM в JSON, но это невозможно. Вместо этого он сериализуется как пустой объект. Что вы затем пытаетесь сделать alert(...). Когда вы alert объект, он будет содержать [Object object] каждый раз.

Операции JSON.stringify/JSON.parse на самом деле не связаны с вашей проблемой. Он будет работать отлично с любым допустимым объектом - просто не DOM-узлом.

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

var o = { 
    inner: dope.innerHtml 
}; 
+0

Хорошо спасибо, теперь я понимаю, почему это не работает. Но можете ли вы объяснить мне, как я могу изменить свой узел DOM на объект, чтобы он мог работать. – DrBad

0

Предложение:

Если вы хотите распечатать объект для отладки кода, попробуйте это :

console.log(pla) 

В противном случае попробуйте это в случае alert:

Попробуйте это даст вам выход с отступом объекта JSON :

alert(JSON.stringify(pla, null, 4)); 

Преимущества:

  • кросс-платформенная поддержка
  • стандартизован в ECMAScript 5th Edition
  • в Firefox, Chrome, Safari и IE8.