Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ошибка "Cannot read properties of null" (https://javascript.ru/forum/misc/83559-oshibka-cannot-read-properties-null.html)

JaneGame 13.01.2022 15:32

Ошибка "Cannot read properties of null"
 
Добрый день!
Недавно начала учить JS, по условию задания надо создать скрипт, ищущий книгу в библиотеке. Я написала вот это:

findBookBy(type, value){
        for(let i=0; i<this.books.length; i++){
            if(type==this.name[i]&&type==this.author[i]&&type==this.releaseDate[i]&&type==this.type[i]){
                return [value];
            }else{
                return null;
            }
        }
    }


И у меня в тестах выскакивает "Cannot read properties of null (reading 'name')". Я так понимаю, не хватает привязки к классу Book, но не понимаю как её реализовать. Помогите, пожалуйста, разобраться.

Aetae 13.01.2022 15:40

Мало информации. Ошибка такая возникает потому, что где-то в коде есть что-то.name где что-то имеет значение null.
В приведённом коде чтение name происходит только в this.name, однако если бы this было null, то до этого места исполнение бы просто не дошло, а свалилось с похожей ошибкой ещё на this.books.length.
Так что нужно больше кода. Ну и если вы в консоли тыкнете по ошибке - у вас откроет проблемное место в отладчике.

JaneGame 13.01.2022 15:54

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

voraa 13.01.2022 17:37

Цитата:

Сообщение от JaneGame
type==this.name[i]

А name это что такое? Массив или строка?

voraa 13.01.2022 17:45

Цитата:

Сообщение от JaneGame
if(type==this.name[i]&&type==this.author[i]&&type==this.releaseDate[i]&&type==this.type[i]){

Я не нашел в вашем классе
class Library{
    constructor(name){
        this.name = name;
        this.books = [];
    }

ни author ни releaseDate ни type
Они есть в классе PrintEditionItem,
Но Library не наследует от него

JaneGame 13.01.2022 19:39

Цитата:

Сообщение от voraa (Сообщение 542927)
А name это что такое? Массив или строка?

Строка. По идее у нас идет счетчик по книгам и мы сравниваем поэлементно с каждой характеристикой. Возможно, где-то ошиблась в синтаксисе? Пока не очень хорошо разобралась, как это дело работает.

Цитата:

Сообщение от voraa (Сообщение 542928)
Я не нашел в вашем классе
class Library{
    constructor(name){
        this.name = name;
        this.books = [];
    }

ни author ни releaseDate ни type
Они есть в классе PrintEditionItem,
Но Library не наследует от него

Т.е. характеристики он не видит? А если создан экземпляр класса (в тестах он создается)? Просто странно так - null вроде срабатывает, а если что-то находит - выскакивает ошибка. Ничего не понимаю=(

voraa 13.01.2022 19:54

Цитата:

Сообщение от JaneGame
Строка. По идее у нас идет счетчик по книгам и мы сравниваем поэлементно с каждой характеристикой

Если name строка, то this.name[i] - i-ый символ этой строки

Я не вижу, ка создаются экземпляры этого класса, и как вызывается функция.

JaneGame 13.01.2022 21:05

Вот здесь идет создание экземпляров, чуть ниже - их вызов.

JaneGame 13.01.2022 21:51

Всё, разобралась, спасибо всем большое!


Часовой пояс GMT +3, время: 09:50.