#javascript #json #oop
#javascript #json #ооп
Вопрос:
class Store{
static getBooks(){
let books;
if(localStorage.getItem('books') === null){
books = [];
}else{
books = JSON.parse(localStorage.getItem('books'));
}
return books;
}
static addBook(book){
//get the books form The GetBooks() Function
const books = Store.getBooks();
books.push(book);
localStorage.setItem('books',JSON.stringify('books'));
}
}
Это код, который я написал для локального хранения книг. Я смотрел учебник Youtube во время его создания, и, похоже, я не понял, что делает JSON
Комментарии:
1. Прочитайте это: что такое JSON в любом случае
2. Вы можете прочитать о JSON здесь: JSON . Вкратце:
JSON.stringify()
метод преобразует объект или значение JavaScript в строку JSON, аJSON.parse()
метод анализирует строку JSON, создавая значение или объект JavaScript, описанный строкой.3. setItem неверен … вы строите строку, а не переменную
4. Как сказал @charlietfl, немного более подробно: вы использовали
localStorage.setItem('books',JSON.stringify('books'))
, где вы должны были использовать (угадывая по вашему предполагаемому намерению)localStorage.setItem('books',JSON.stringify(books))
.
Ответ №1:
localStorage может хранить данные в строковом формате, поэтому, прежде чем вы сможете использовать их в качестве объектных данных в Javascript, вам нужно преобразовать их в объект с помощью метода JSON.parse() .
при сохранении ее обратно в localStorage вам нужно вернуть ее к строковому значению с помощью JSON.stringify()
Ответ №2:
JSON.parse(localStorage.getItem('books'))
получает значение books
из localStorage (всегда строка) и преобразует это значение в объект javascript. С другой стороны localStorage.setItem('books',JSON.stringify(books))
, объект превращается в строку, чтобы его можно было установить внутри localStorage
(вы можете помещать строки только в локальное хранилище).
Комментарии:
1. Вы правы. OP допустил ошибку
stringify('books')
вместоstringify(books)
, как указал @charlietfl в комментариях к вопросу. Просто указать на это = не ваша вина = просто пропустил это, как и я, пока не увидел комментарий…