Почему возникает ошибка Cannot read property ‘map’ of undefined? — Хабр Q&A

Почему возникает ошибка Cannot read property 'map' of undefined? — Хабр Q&A Электронная цифровая подпись

Почему в консоли cannot read property ‘contains’ of undefined при делегировании, но все работает?

Пытаюсь в JS. Не очень выходит. Задача: сделать раскрытие блока по высоте на атрибутах на нативном JS. Высота блока считается динамически при наведении, исходя из высоты блока, скрытого на position: absolute. Написал старый код на jQuery, решил переписать на нативном.

С задачей как бы справился: все раскрывается, считается верно и т. п. Делегирование тоже работает. Но консоль постоянно ругается на то, что:

Uncaught TypeError: Cannot read property 'contains' of undefined

Либо же undefined является какая-то из переменных. При этом все работает правильно чисто визуально.

Упростил код из проекта:

Почему возникает ошибка cannot read property ‘map’ of undefined?

const [users, setUsers] = useState({user:['user1', 'user2', 'user3']});

Здесь users это объект, единственное свойство которого является массивом.

setUsers(users.user.filter((item,i) => i !== index));

А здесь – массив.

const list = users.user.map(...

У этого массива вы пытаетесь прочитать свойство user, которого нет, получаете undefined, а дальше… Ну, сообщение об ошибке вы уже видели.

Вы бы определились, чем должен быть users.

Что это за ошибка "cannot read property ‘1’ of undefined" на node js?

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

vk.updates.hear(/^(?:казино)s?(.*)?/i, async (message, args, bot, next) => {
	var id = await find(message.senderId);
	message.args[1] = message.args[1].replace(/(.|,)/ig, '');
	message.args[1] = message.args[1].replace(/(к|k)/ig, '000');
	message.args[1] = message.args[1].replace(/(м|m)/ig, '000000');

	if(!Number(message.args[1])) return;
	message.args[1] = Math.floor(Number(message.args[1]));

	if(message.args[1] <= 0) return;

	if(message.args[1] > users[id].balance) return message.send(`у вас нет данной суммы`);
	else if(message.args[1] <= users[id].balance)
	{
		users[id].balance -= message.args[1];
		const multiply = utils.pick([0.75, 0.75, 2, 0.75, 0.75, 0.5, 0.75, 0.75, 0.75, 0.75, 0.75, 0.25, 0.75, 0.75, 0.75, 2, 0.75, 5, 0.75, 0.5, 0.75, 0.75, 0.75, 0.75, 0.75, 0.25, 0.75, 2]);

		users[id].balancee  = Math.floor(message.args[1] * multiply);
		return message.send(`${['','', '', '', ''].random()} >> ${multiply === 1 ? `Ваши деньги остаются при вас!` : `${multiply < 1 ? `Вы проиграли ${utils.sp(message.args[1] * multiply)}₽` : `Вы выиграли ${utils.sp(message.args[1] * multiply)}₽`}`}
		❤ >> Сумма умножена в x${multiply}		
		 Ваш баланс: ${utils.sp(users[id].balance)}₽`);
	}
});

При вводе команды: казино “число” – выдаёт следующее:

Читайте также:  Росреестр

5ece1bef20a6a175068184.jpeg

Возможно, ошибка супер очевидная… Но я изучаю js всего 2 дня, я просто не понимаю что это может быть! И дело не в английском языке 🙂 Не соврать бы, сижу уже часов 7 над этой командой, просто представьте сколько раз я ее переписал в доль и поперёк. И замечу, в другом боте работает, но у меня почему то нет… и у меня vk.updates.hear а в другом боте cmd.on, но до сих пор понять не могу почему так, ведь npm пакет один. vk-io. Спасибо!

Uncaught typeerror: cannot read property — что это означает – журнал «код» программирование без снобизма

Допустим, вы делаете страницу с формой и полем ввода:

<form name="myform">
<input name="myinput" value="10" />
</form>

Нужно, чтобы скрипт нашёл эту форму, достал из неё значение поля ввода и вывел его на экран. Вы пишете скрипт и оформляете его как отдельный файл, который подключаете в разделе head:

<script>
var str = '';
for(i=0; i < document.myform.elements.length; i ){
str = document.myform.elements[i].name
'=' encodeURIComponent(document.myform.elements[i].value)
(i == document.myform.elements.length -1 ? '' : '&');
}
alert(str);
</script>

Этот скрипт должен быть правильным. При тестировании внутри консоли он делает именно то, что нужно. Но после запуска скрипт падает с ошибкой:

❌ Uncaught TypeError: Cannot read property

Это означает: «Вы пытаетесь прочитать у объекта какое-то свойство, но я не могу его найти, а значит, не могу и прочитать то, чего нет».

Странно, ведь вы уверены, что у этого объекта такое свойство точно есть, и вы сто раз так уже делали.

Всё так и одновременно не так.

Эта ошибка чаще всего происходит, когда вы обращаетесь к свойствам объекта раньше, чем объект готов:

  • Скорее всего, объект ещё не загрузился.
  • Может быть, этот объект должен появиться на странице по скрипту, который ещё не выполнился.
  • Допущена опечатка в названии объекта, поэтому при обращении к нему скрипт его не находит.
Читайте также:  Lkul nalog ru вход и Личный кабинет налогоплательщика ИП

Наш случай — первый и самый распространённый: мы вызываем скрипт в разделе <head>, но форма у нас ещё не готова — она банально не загружена в документ, поэтому скрипт не может прочитать свойства несуществующей формы.

Чтобы избавиться от этой ошибки, нужно добавить в вызов скрипта атрибут defer — он заставит скрипт подождать, пока страница загрузится полностью, вместе с формой.

<script defer src="...">

Второй вариант — поместить вызов скрипта сразу после формы, тогда к моменту вызова всё окажется на своих местах и ошибки не будет. Или вообще в конце всего документа.

Cannot read property ‘use’ of undefined. в чём ошибка при подключении плагина?

Ошибка в консоли браузера.

router.js?41cb:5 Uncaught TypeError: Cannot read property 'use' of undefined
    at eval (router.js?41cb:5)
    at Module../src/router.js (app.js:1112)
    at __webpack_require__ (app.js:854)
    at fn (app.js:151)
    at eval (main.js:12)
    at Module../src/main.js (app.js:1100)
    at __webpack_require__ (app.js:854)
    at fn (app.js:151)
    at Object.1 (app.js:1149)

Файл main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

createApp(App, router).mount('#app')

Файл router.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/views/Home'

Vue.use(Router)

export default new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      component: Home,
    },

    {
      path: '/todos',
      component: () => import('./views/Todos.vue'),
    },
  ],
})

Где я ошибся? Как исправить данную ошибку?

How to avoid ‘cannot read property of undefined’ errors?

Imagine that we want to apply a series of functions to x if and only if x is non-null:

if (x !== null) x = a(x);
if (x !== null) x = b(x);
if (x !== null) x = c(x);

Now let’s say that we need to do the same to y:

if (y !== null) y = a(y);
if (y !== null) y = b(y);
if (y !== null) y = c(y);

And the same to z:

if (z !== null) z = a(z);
if (z !== null) z = b(z);
if (z !== null) z = c(z);

As you can see without a proper abstraction, we’ll end up duplicating code over and over again. Such an abstraction already exists: the Maybe monad.

Читайте также:  Почему в React не обновляется props компонента при изменении хранилища Redux в другом компоненте? — Хабр Q&A

The Maybe monad holds both a value and a computational context:

  1. The monad keeps the value safe and applies functions to it.
  2. The computational context is a null check before applying a function.

A naive implementation would look like this:

⚠️ This implementation is for illustration purpose only! This is not how it should be done and is wrong at many levels. However this should give you a better idea of what I am talking about.

As you can see nothing can break:

  1. We apply a series of functions to our value
  2. If at any point, the value becomes null (or undefined) we just don’t apply any function anymore.

Appendix 1

I cannot explain what monads are as this is not the purpose of this post and there are people out there better at this than I am. However as Eric Elliot said in hist blog post JavaScript Monads Made Simple:

Regardless of your skill level or understanding of category theory, using monads makes your code easier to work with. Failing to take advantage of monads may make your code harder to work with (e.g., callback hell, nested conditional branches, more verbosity).


Appendix 2

Here’s how I’d solve your issue using the Maybe monad from monetjs

Ошибка cannot read property ‘setstate’ of undefined?

А еще можно записать в конструкторе App.

this.handleSearch = this.handleSearch.bind(this);

В Open-Source библиотеках которые я видел, используется именно такой метод.
А вообще, дам совет, если у вас что-то не получается, идем в Google и пишем “reactjs функция которая не работает es6” именно по вашей проблеме есть уже несколько решенных вопросов.

Оцените статью
ЭЦП Эксперт
Добавить комментарий