Почему includes у массива сначала возвращает true, потом false?

Есть код:
function loadCurrentBookpage(pageNumber) {
    let bookmarkButton = document.getElementById("bookmarkButton");
    let bookmarkIcon = document.getElementById("bookmarkIcon");
    let nextPageElement = document.getElementById("nextPageButton");
    let previousPageElement = document.getElementById("previousPageButton");

    let pageOfPagesElement = document.getElementById("pageOfPages");
    let pageContentElement = document.getElementById("pageContent");
    pageContentElement.textContent = "";

    let authToken = localStorage.getItem("accessToken");
    let bookmarksArray = localStorage.getItem("currentBookBookmarks").split(",");
    let currentPageNumber = pageNumber;
    let currentBookId = localStorage.getItem("currentBookId");

    let url = "http://localhost:8080/api/books/" + currentBookId + "/pages?page=" + currentPageNumber;
    console.log("Попытка отправить запрос на: " + url);
    let xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.setRequestHeader("Authorization", authToken);
    xhr.onload = function () {
        if (xhr.readyState === 4) {
            let resp = JSON.parse(xhr.responseText);
            switch (xhr.status) {
                case 200:
                    console.log("Успешный ответ сервера: " + xhr.responseText);
                    console.log("Содержимое страницы: " + resp.pageContent[0].pageContent);
                    pageContentElement.textContent = resp.pageContent[0].pageContent;
                    pageOfPagesElement.textContent = "Страница " + resp.currentFakePage + " из " + resp.totalPages;
                    if (resp.hasNext === true) {
                        nextPageElement.classList.remove("disabled")
                    } else {
                        nextPageElement.classList.add("disabled")
                    }
                    if (resp.hasPrevious === true) {
                        previousPageElement.classList.remove("disabled")
                    } else {
                        previousPageElement.classList.add("disabled")
                    }

                    if (bookmarksArray.includes(currentPageNumber)) {
                        console.log("Страница " + currentPageNumber + " есть в закладках");
                        bookmarkButton.classList.remove("btn-outline-primary");
                        bookmarkButton.classList.add("btn-primary");
                        bookmarkIcon.classList.remove("bi-bookmark");
                        bookmarkIcon.classList.add("bi-bookmark-check-fill");
                        bookmarkButton.dataset.action = "remove";
                    } else {
                        console.log("Страницы " + currentPageNumber + " в закладках нет");
                        bookmarkButton.classList.remove("btn-primary");
                        bookmarkButton.classList.add("btn-outline-primary");
                        bookmarkIcon.classList.remove("bi-bookmark-check-fill");
                        bookmarkIcon.classList.add("bi-bookmark");
                        bookmarkButton.dataset.action = "add";
                    }

                    break;
                case 401:
                    console.log("Ошибка авторизации...")
                    break;
                case 403:
                    console.log("Ошибка: " + resp.message);
                    break;
                default:
                    console.log("Код: " + xhr.status + ", ответ сервера: " + xhr.responseText);
            }
        }
    }
    xhr.send();
}


Рядом с областью, где отображается загруженное содержимое (fullscreen modal из bootstrap), есть две кнопки, нажатие на которые вызывает следующие функции:
function loadNextPage() {
    let currentPage = localStorage.getItem("currentPage");
    console.log("loadNextPage. Текущее значение currentPage = " + currentPage);
    loadCurrentBookPage(++currentPage);
    console.log("loadNextPage. Новое значение currentPage = " + currentPage);
    localStorage.setItem("currentPage", currentPage);
}

function loadPreviousPage() {
    let currentPage = localStorage.getItem("currentPage");
    console.log("loadPreviousPage. Текущее значение currentPage = " + currentPage);
    loadCurrentBookPage(--currentPage);
    console.log("loadPreviousPage. Новое значение currentPage = " + currentPage);
    localStorage.setItem("currentPage", currentPage);
}


Почему-то [в первом блоке кода] условие if (bookmarksArray.includes(currentPageNumber)) первый раз возвращает true:
Массив bookmarksArray = 0,1,3
Переменная currentPageNumber = 3
Страница 3 есть в закладках

Когда начинаю листать кнопками туда-сюда, сразу же возвращает false:
Массив bookmarksArray = 0,1,3
Переменная currentPageNumber = 2
Страницы 2 в закладках нет

Если я возвращаюсь на исходную страницу (3) результат опять будет false.

Чем может быть обусловлено такое поведение? Что я упустил?
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
steff
@steff Автор вопроса
Спасибо, alexalexes. Дело было в типе данных. Первый раз функция вызывалась с конкретным номером страницы, аргументом которой было число. При последующих вызовах значение бралось из localStorage, путем преобразования в массив строковых элементов. Там-то и было несоответствие.
Исправил всё не строки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы