Что делают JSON.parse() и JSON.stringify() в приведенном ниже коде. Я создаю библиотеку книг

#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 в комментариях к вопросу. Просто указать на это = не ваша вина = просто пропустил это, как и я, пока не увидел комментарий…