Cannot read properties of undefined reading indexof как исправить

I got this simple form that registers users and send the uid and email data to a collection on firestore, im using latest version of Firebase 9 w/ modular.
The authentication works great, but the firestore part doesnt. It throws me an error:

TypeError: Cannot read properties of undefined (reading 'indexOf')
at Function.fromString (path.ts:229)
at Ac2 (reference.ts:374)
at Login.jsx:29

I dont know what does that mean, I am trying to upload the email and uid information of the registered user to firestore with the order of ‘users / (and here the useruid)/ all the user data’ but throws me that error.

I leave my code:

import React, { useState, useEffect, useCallback } from 'react'
import { auth, db } from "../firebase"
import { createUserWithEmailAndPassword } from "firebase/auth";
import { collection, doc, addDoc, setDoc } from "firebase/firestore"; 



function Login() {
    const [email, setEmail] = useState('')
    const [pass, setPass] = useState('')
    const [error, setError] = useState('')
    const [userData, setUserData] = useState('')

    const ProcessData = e => {
        e.preventDefault()
        registro()
    }

    const registro = useCallback(async() => {

        try {
            await createUserWithEmailAndPassword(auth, email, pass)
            .then((userCredential) => {
                const user = userCredential.user;
                setUserData(user)
            })
            
            
            await addDoc(collection(db, 'users', userData.uid), {
                email: userData.email,
                uid: userData.uid
              })
                
            
            
            setEmail('')
            setPass('')
            setError('')

        } catch (error) {
            const errorCode = error.code;
            const errorMessage = error.message;

            setError(errorMessage)
            console.log(error)
        }
            
    }, [email, pass, error, userData])

    return (
        <div>
            <h3>Registro</h3>
            <form onSubmit={ProcessData}>
                <label>Email Adress</label>
                <input
                type="email"
                placeholder="Email Address"
                onChange={e => setEmail(e.target.value)}
                value={email}
                />
                <label>Password</label>
                <input
                type="password"
                placeholder="Password"
                onChange={e => setPass(e.target.value)}
                value={pass}
                />
                <button type="submit">Registrarse</button>
            </form>
        </div>
    )
}

export default Login


  System:
    OS: Linux 5.4 Zorin OS 15.3
    CPU: (4) x64 Intel(R) Core(TM) i5 CPU         750  @ 2.67GHz
  Binaries:
    Node: 16.13.1 - ~/.nvm/versions/node/v16.13.1/bin/node
    Yarn: 1.22.15 - /snap/bin/yarn
    npm: 8.1.2 - ~/.nvm/versions/node/v16.13.1/bin/npm
  Browsers:
    Chrome: Not Found
    Firefox: 80.0.1
  npmGlobalPackages:
    @vue/cli: 4.5.15

Vue UI creates a project.

TypeError: Cannot read properties of undefined (reading ‘indexOf’)
at /home/zmalik/.nvm/versions/node/v16.13.1/lib/node_modules/@vue/cli/node_modules/@vue/cli-ui/apollo-server/connectors/projects.js:283:35
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async Object.wrap (/home/zmalik/.nvm/versions/node/v16.13.1/lib/node_modules/@vue/cli/node_modules/@vue/cli-ui/apollo-server/connectors/progress.js:39:14)

Добрый день, помогите разобраться с ошибкой в indexOf. «Uncaught TypeError: Cannot read property ‘indexOf’ of undefined».
Знаю, что значит эта ошибка, а исправить проблему не получается. Может использовать другой метод, если да, то какой?
Смысл кода в том, чтобы сгенерировать массив, число и попытаться найти это число в массиве.

function searchRndElementInRndArray() {
  const rndArr = randomArray(1, 15);
  const rndInteger = randomInteger(1, 15);
  findRandomIntegerInRandomArray();
  function findRandomIntegerInRandomArray() {
    if (rndArr.indexOf(rndInteger) >= 0) {      //Здесь та самая ошибка. 
      console.log('Element ' + rndInteger + ' found');
    }
    return console.log('Element not found');
  }
}

function randomArray(min, max) {
  var array = [];
  for (let i = 0; i < 10; i++) {
    array.push(Math.floor(Math.random() * (max - min + 1)) + min);
  }
  return array && console.log('Filled random array: ' + array);
}

function randomInteger(min, max) {
  return Math.floor(min + Math.random() * (max + 1 - min));
}

const show = new searchRndElementInRndArray();

https://jsfiddle.net/6fymdvnt/1/

Содержание

  • Почему возникает ошибка Cannot read property ‘xxx’ of undefined
  • Присвойте начальное значение переменной
  • Улучшите связность вашего кода
  • Проверьте наличие свойства
  • Деструктурируйте доступ к свойствам нужного объекта
  • Заключение
  • 2 Answers 2

При отладке своего кода (обычно на JavaScript) программист может столкнуться с системным сообщением об ошибке « TypeError: Cannot read property ‘xxx’ of undefined ». Вместо значения ХХХ указана какая-либо объявленная переменная или свойство объекта, значение которых по различным причинам не задано разработчиком. Ниже разберём, каков перевод данного сообщения, и каково может быть решение возникшей проблемы.

В переводе данное сообщение выглядит как «Ошибка типа: Не удаётся прочитать неопределённое свойство ХХХ». Поскольку в некоторых языках программирования (в частности, «JavaScript») есть возможность получения доступа к неинициализированным значениям, то это может вызывать появление рассматриваемой мной ошибки.

Что до причин ошибки undefined, то она обычно возникает при отладке какого-либо программного кода, и может быть вызвана следующими факторами:

  • Использующиеся в программном коде переменная не была инициализирована (переменной не присвоено значение);
  • Была осуществлена попытка доступа к отсутствующему свойству объекта;
  • Была попытка получить доступ к отсутствующему элементу массива.

Давайте разберёмся, как исправить ошибку ««TypeError: Cannot read property ‘xxx’ of undefined» при написании вашего кода.

Присвойте начальное значение переменной

Наиболее очевидным способом избавиться от ошибки ««TypeError: Cannot read property ‘xxx’ of undefined» является присвоение переменной начального значения. Чем меньше такая переменная пребывает в неинициализированном состоянии – тем будет лучше. В идеале лучше сразу же присвоить значение «Variable» = «начальное значение» (‘initial’), хотя далеко не всегда специфика вашего кода может предполагать указанный вариант.

Улучшите связность вашего кода

Термин «связность» в нашем контексте характеризует уровень взаимосвязанности элементов разрабатываемого вами модуля (пространства имён, метода, класса, блока кода). Как известно, существуют два типа связности, а именно сильная и слабая связность. Использование сильной связности предполагает фокусировку элементов модуля лишь на одной задаче. Потому для извлечения выгоды из сильной связности, необходимо держать используемые переменные поближе к блоку кода, в работе которого они используются.

К примеру, вместо блока кода:

будет оптимальнее переместить переменные поближе к месту их применения:

Улучшение связности позволит избежать появление ошибки «Cannot read property ‘xxx’ of undefined» при отладке вашего кода.

Проверьте наличие свойства

В языке Javascript имеются ряд инструментов, позволяющих определить, имеет ли необходимый нам объект какое-либо свойство:

В частности, это:

  • typeof obj.prop !== ‘undefined’ — данный инструмент позволяет проверить тип значения свойства;
  • obj.prop !== undefined — этот инструмент позволяет сравнить объект непосредственно с undefined;
  • ‘prop’ in obj позволяет проверить объект на наличие его собственного или полученного свойства;
  • И obj.hasOwnProperty(‘prop’) позволяет проверить объект на наличие его собственного свойства.

В этом и схожих случаях рекомендуется использовать оператор in, который обладает простым и удобным синтаксисом. Наличие оператора in демонстрирует желание проверить, имеет ли объект нужное свойство без обращения к фактическому значению данного свойства.

Деструктурируйте доступ к свойствам нужного объекта

Деструктурирование нужного объекта позволяет непосредственно извлекать значения свойства объекта в переменные или, если такое свойство не существует, устанавливать значение по дефаулту. Такой вариант позволяет исключить прямой контакт с undefined.

Извлечение свойств теперь выглядит примерно так:

Деструктурирование хорошо, когда можно указать значение по умолчанию, и это значение будет возвращено при попытке доступа к отсутствующему свойству. В конечном счёте, благодаря деструктурированию вы сможете избежать появления undefined и всех сопутствующих проблем.

Заключение

В нашей статье мы разобрали, почему появляется ошибка «TypeError: Cannot read property ‘xxx’ of undefined», каковы её перевод и решение. Во избежание возникновения данной ошибки присвойте начальное значение соответствующей переменной. Это позволит избежать появления рассмотренной выше дисфункции при отладке вашего кода.

Im trying to search if a value exits in an array. Im using ui-select to capture the values, and i create function to verify if the value exists and all works great but the console show me many times Cannot read property ‘indexOf’ of undefined.

here the select codes used to capture the data

here is the checkbox code with the function

and here it’s the function

all works great! only the console send me many times the error of indexOf

2 Answers 2

If you can not read indexOf of data it is because data is undefined.

I wanted to say that data have no value in it so it can not have methods like indexOf. You can check like this:

Here, you try to read the type of value in data. If the result is undefined it’s mean that data is empty.

So, you have to check if data is not empty (undefined). You can check it like that:

It’s because data contains undefined , its because of what you are passing is undefined or from somewhere else you are passing nothing to this method. As per your code, I can say entrevistainicialModel.personalidad should be initialized with an array or string or something like tha, which have the indexOf method, then you will not get this error Cannot read property ‘indexOf’ of undefined

Otherwise you should handle the scenario like (data || []).indexOf(. )

Использую такое выражение:

Но в консоли, возникает такая ошибка:

После вставки в атрибут data-content, получается такой HTML:

Как её исправить?

  • Вопрос задан более трёх лет назад
  • 2481 просмотр

Этот кусок будет восприниматься браузером как отдельный элемент, поэтому jQuery и не находит этот атрибут.
Мало того, что Вы пытаетесь использовать html-разметку внутри атрибута, Вы еще его неправильно оформили. Нормальный редактор кода должен был давно заругаться на это.
Замените символы на эти:

  • &lt ; вместо знака
  • &quot ; вместо кавычек «

Пробел между ; и остальной частью надо убрать.

vue ui cannot read property ‘indexOf’ of undefined error resolution

tags: vue.js  node.js

Vue ui reports an error in the last step of creating a project

  • current version

  • Checked a lot of solutions,
  • The administrator has been stuck when opening cmd
  • Modifying the Taobao mirror will not work

It turned out to be the reason for the version, downloadnpm uninstall -g @vue/cliThe latest version can be solved

Perfect solution


Intelligent Recommendation

Cannot Read Property ‘Vue’ of undefined error

Confirm that the check is not your own code, write the problem, from the installation package, you can’t read the Vue file, it should be the version of the installation package, this item uses the Vue…

More Recommendation

Понравилась статья? Поделить с друзьями:
  • Как исправить отставание звука в блютуз наушниках в играх
  • Как найти придаточное определительное примеры
  • Метеоритный слиток террария как найти
  • Насвай как найти его в крови
  • Как исправить договор от руки