Главная » Ошибки » Ошибка JavaScript: проверка в консоли разработчика, устранение typeerror и других неполадок

Ошибка JavaScript: проверка в консоли разработчика, устранение typeerror и других неполадок

В этой статье

1. Uncaught TypeError: Cannot read property

Если вы разработчик JavaScript, то, вероятно, видели эту ошибку очень много раз. Это происходит в Chrome, когда вы читаете свойство или вызываете метод на неопределенный объект. Это можно очень легко проверить в консоли разработчика Chrome.

Топ-10 ошибок JavaScript из 1000+ проектов (и как их избежать)

Это может произойти по многим причинам, но чаще всего это неправильная инициализация состояния при рендеринге компонентов пользовательского интерфейса. Давайте рассмотрим пример того, как это может произойти в реальном приложении. Мы выберем React, но те же принципы неправильной инициализации применимы и к Angular, Vue или любой другой структуре.

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
class Quiz extends Component {
componentWillMount() {
axios.get(‘/thedata’).then(res => {
this.setState({items: res.data});
});
}

render() {
return (

    {this.state.items.map(item =>

  • {item.name}
  • )}

);
}
}

1234567891011121314151617classQuizextendsComponent{  componentWillMount(){    axios.get(‘/thedata’).then(res=>{      this.setState({items:res.data});    });  }   render(){    return(      

            {this.state.items.map(item=>          

  • {item.name}
  •         )}      

    );  }}

Здесь понимаются две важные вещи:

Состояние компонента (например, this.state ) начинает жизнь как undefined.

Когда вы извлекаете данные асинхронно, компонент будет отображаться как минимум один раз перед загрузкой данных — независимо от того, выбрана ли она в конструкторе componentWillMount или componentDidMount . Когда Quiz отображается впервые, this.state.items не определен. Это, в свою очередь, означает, что ItemList получает элементы как неопределенные, и вы получаете сообщение об ошибке «Uncaught TypeError: Невозможно прочитать карту свойств» в консоли.

Это легко исправить. Самый простой способ: инициализировать состояние с разумными значениями по умолчанию в конструкторе.

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
class Quiz extends Component {
// Added this:
constructor(props) {
super(props);

// Assign state itself, and a default value for items
this.state = {
items: [] };
}

componentWillMount() {
axios.get(‘/thedata’).then(res => {
this.setState({items: res.data});
});
}

render() {
return (

    {this.state.items.map(item =>

  • {item.name}
  • )}

);
}
}

123456789101112131415161718192021222324252627classQuizextendsComponent{  // Added this:  constructor(props){    super(props);     // Assign state itself, and a default value for items    this.state={      items:[]    };  }   componentWillMount(){    axios.get(‘/thedata’).then(res=>{      this.setState({items:res.data});    });  }   render(){    return(      

            {this.state.items.map(item=>          

  • {item.name}
  •         )}      

    );  }}

Код в вашем приложении может отличаться, но мы надеемся, что дали вам достаточно информации, чтобы исправить или избежать этой проблемы. Если нет, продолжайте читать, потому что далее мы рассмотрим больше примеров связанных с ошибками.

2. TypeError: ‘undefined’ is not an object (evaluating

Эта ошибка возникает в Safari при чтении свойства или вызове метода для неопределенного объекта. Вы можете проверить это в консоли разработчика Safari. Это по сути то же самое, что и вышеприведенная ошибка для Chrome, только Safari использует другое сообщение об ошибке.

Топ-10 ошибок JavaScript из 1000+ проектов (и как их избежать)

3. TypeError: null is not an object (evaluating

Это ошибка, которая возникает в Safari при чтении свойства или вызове метода для пустого объекта. Проверить это можно в консоли разработчика Safari.

Топ-10 ошибок JavaScript из 1000+ проектов (и как их избежать)

Интересно, что в JavaScript значения null и undefined не совпадают, поэтому мы видим два разных сообщения об ошибках. Undefined обычно является переменной, которая не была назначена, а null означает, что значение пустое. Чтобы убедиться, что они не одно и то же, попробуйте использовать строгий оператор равенства:

Топ-10 ошибок JavaScript из 1000+ проектов (и как их избежать)

Один из способов, которым эта ошибка может возникнуть в реальном мире — это попытка использовать элемент DOM в JavaScript перед загрузкой элемента. Это потому, что DOM API возвращает null для ссылок на пустые объекты.

Любой JS-код, который выполняет и обрабатывает элементы DOM, должен выполняться после создания элементов DOM. JS-код интерпретируется сверху вниз, как изложено в HTML. Итак, если перед элементами DOM есть тег, код JS в теге скрипта будет выполняться, когда браузер анализирует HTML-страницу. Вы получите эту ошибку, если элементы DOM не были созданы до загрузки сценария.

В этом примере мы можем решить проблему, добавив прослушиватель событий, который уведомит нас, когда страница будет готова. После addEventListener метод init() может использовать элементы DOM.

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">



12345678910111213141516171819 

    

4. (unknown): Script error

Ошибка скрипта возникает, когда ошибка неперехваченного JavaScript пересекает границы домена и нарушает политику перекрестного происхождения. Например, если вы размещаете свой код JavaScript на CDN, любые неперехваченные ошибки (ошибки, которые появляются в обработчике window.onerror, вместо того, чтобы быть пойманным в try-catch) будут переданы как просто «Script error» вместо того, чтобы содержать полезную информацию. Эта мера безопасности браузера предназначена для предотвращения передачи данных по доменам, которые в противном случае не были бы допущены к коммуникации.

Чтобы получить реальные сообщения об ошибках, выполните следующие действия:

1. Отправьте заголовок Access-Control-Allow-Origin

Установка заголовка Access-Control-Allow-Origin в * означает, что к ресурсу можно получить доступ из любого домена. Вы можете заменить * своим доменом, если необходимо: например, Access-Control-Allow-Origin: www.example.com . Если вы используете CDN из-за проблем с кэшированием, которые могут возникнуть, обработка нескольких доменов становится сложной и нельзя не приложить усилий. Подробнее см. здесь.

Вот несколько примеров того, как установить этот заголовок в различных средах:

Apache

В папках, где будут храниться ваши файлы JavaScript, создайте файл .htaccess со следующим содержимым:

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
Header add Access-Control-Allow-Origin “*”

1Header add Access-Control-Allow-Origin”*”

Nginx

Добавьте директиву add_хедер в блок местоположения, который служит файлам JavaScript:

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
location ~ ^/assets/ { add_хедер Access-Control-Allow-Origin *; }

1location~^/assets/{add_хедер Access-Control-Allow-Origin *;}

HAProxy

Добавьте в ресурс, где будут загружены файлы JavaScript:

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
rspadd Access-Control-Allow-Origin: *

1rspadd Access-Control-Allow-Origin:*

2. Установите crossorigin = «anonymous» в теге скрипта

В HTML-источнике для каждого из сценариев, где вы установите заголовок Access-Control-Allow-Origin, в теге SCRIPT установите crossorigin=»anonymous». Убедитесь, что заголовок отправляется для файла сценария, перед добавлением свойства crossorigin в тег скрипта. В Firefox, если атрибут crossorigin присутствует, но заголовок Access-Control-Allow-Origin отсутствует, сценарий не будет выполнен.

5. TypeError: Object doesn’t support property

Это ошибка, которая возникает в IE при вызове неопределенного метода. Вы можете проверить это в IE Developer Console.

Топ-10 ошибок JavaScript из 1000+ проектов (и как их избежать)

Это эквивалентно ошибке «TypeError: ‘undefined’ is not a function» в Chrome. Да, разные браузеры могут иметь разные сообщения для одной и той же ошибки.

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее

Это обычная проблема для IE в веб-приложениях, использующих пространство имен JavaScript. Когда это так, проблема в 99,9% случаев— это неспособность IE связать методы в текущем пространстве имен с ключевым словом this. Например, если у вас есть пространство имен имен Rollbar с помощью метода isAwesome. Обычно, если вы находитесь в пространстве имен Rollbar вы можете вызвать метод isAwesome со следующим синтаксисом:

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
this.isAwesome ();

1this.isAwesome();

Chrome, Firefox и Opera с радостью согласятся с этим синтаксисом. С другой стороны, IE не станет. Таким образом, самая безопасная ставка при использовании JS namespacing — это префикс с фактическим пространством имен.

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
Rollbar.isAwesome ();

1Rollbar.isAwesome();

7. Uncaught RangeError: Maximum call stack

Это ошибка, которая возникает в Chrome при нескольких обстоятельствах. Одно из них — когда вы вызываете рекурсивную функцию, которая не завершается. Вы можете протестировать это в консоли разработчика Chrome.

Топ-10 ошибок JavaScript из 1000+ проектов (и как их избежать)

Это также может произойти, если вы передадите значение функции, находящейся за пределами допустимого диапазона. Многие функции принимают только определенный диапазон чисел для своих входных значений. Например, Number.toExponential(digits) и N umber.toFixed(digits) принимают цифры от 0 до 20, а Number.toPrecision(digits) принимают цифры от 1 до 21.

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
var a = new Array(4294967295); //OK
var b = new Array(-1); //range error

var num = 2.555555;
document.writeln(num.toExponential(4)); //OK
document.writeln(num.toExponential(-2)); //range error!

num = 2.9999;
document.writeln(num.toFixed(2)); //OK
document.writeln(num.toFixed(25)); //range error!

num = 2.3456;
document.writeln(num.toPrecision(1)); //OK
document.writeln(num.toPrecision(22)); //range error!

1234567891011121314vara=newArray(4294967295);  //OKvarb=newArray(-1);//range error varnum=2.555555;document.writeln(num.toExponential(4));  //OKdocument.writeln(num.toExponential(-2));//range error! num=2.9999;document.writeln(num.toFixed(2));   //OKdocument.writeln(num.toFixed(25));  //range error! num=2.3456;document.writeln(num.toPrecision(1));   //OKdocument.writeln(num.toPrecision(22));  //range error!

8. TypeError: Cannot read property ‘length’

Это ошибка, которая возникает в Chrome из-за свойства длины чтения для неопределенной переменной. Вы можете протестировать это в консоли разработчика Chrome.

Топ-10 ошибок JavaScript из 1000+ проектов (и как их избежать)

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

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
var testArray= [“Test”];

function testFunction(testArray) {
for (var i = 0; i < testArray.length; i++) { console.log(testArray[i]); } }testFunction();

123456789vartestArray=[“Test”]; functiontestFunction(testArray){    for(vari=0;i<>

Когда вы объявляете функцию с параметрами, эти параметры становятся локальными. Это означает, что даже если у вас есть переменные с именами testArray , параметры с одинаковыми именами внутри функции будут по-прежнему рассматриваться как локальные.

У вас есть два способа решить эту проблему:

1. Удалите параметры в объявлении функции (оказывается, вы хотите получить доступ к тем переменным, которые объявлены вне функции, поэтому вам не нужны параметры для вашей функции):

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
var testArray = [“Test”];

/* Precondition: defined testArray outside of a function */
function testFunction(/* No params */) {
for (var i = 0; i < testArray.length; i++) { console.log(testArray[i]); } }testFunction();

12345678910vartestArray=[“Test”]; /* Precondition: defined testArray outside of a function */functiontestFunction(/* No params */){    for(vari=0;i<>

2. Вызовите функцию, передав ей массив, который мы объявили:

<текстареа wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
var testArray = [“Test”];

function testFunction(testArray) {
for (var i = 0; i < testArray.length; i++) { console.log(testArray[i]); } }testFunction(testArray);

123456789vartestArray=[“Test”]; functiontestFunction(testArray){   for(vari=0;i<>

9. Uncaught TypeError: Cannot set property

Когда мы пытаемся получить доступ к неопределенной переменной, она всегда возвращает undefined, а мы не можем получить или установить любое свойство undefined. В этом случае приложение будет выбрасывать “Uncaught TypeError cannot set property of undefined.”

Например, в браузере Chrome:

Топ-10 ошибок JavaScript из 1000+ проектов (и как их избежать)

Если объект test не существует, будет выдаваться ошибка: “Uncaught TypeError cannot set property of undefined.”

Step 2: Install bot to server Copy link

Create a new Discord server with your Discord account to install the bot at.

Back at the App dashboard, navigate to ‘OAuth2’ and select ‘bot’ under the Scopes section.

Install bot to server

You will see an URL being generated at the bottom. Copy this URL and paste it on a new tab. You will be redirected to the page as shown below:

Install bot to server

Install this bot to your preferred Discord server. For example, mine is the MyBot server I just created.

If everything works correctly, your bot should now appear in your Discord server.

Install bot to server

Resources Copy link

  • https://discord.com/developers/docs/intro
  • https://discord.js.org/
  • https://www.npmjs.com/package/axios
  • https://www.npmjs.com/package/dotenv
  • https://github.com/jaychandra6/MemeAPI
  • https://www.w3schools.com/jsref/met_win_setinterval.asp

Victoria Lo

Solutions Engineer @ PayPal

Victoria Lo is currently a Solutions Engineer at PayPal. Her background is in full-stack software/web development. She loves to share her knowledge on programming and give advice for new developers on her blog. Besides being passionate about blogging and software, she loves to read books, play video games and collect quotes.

Conclusion: There’s more! Copy link

There’s way more amazing things you can do with a Discord bot! Even ones that uses databases and so on. Feel free to explore the Discord Developer documentation and the discord.js documentation to learn more and build your own dream bot.

Thanks for reading. I hope this has been a helpful introduction on how to make Discord bot. If it’s helpful, do leave a like or share this article around for more reach.

For more information, please browse the Resources section below or see the code in this tutorial at https://github.com/victoria-lo/discordBot.

If you have build an awesome Discord bot, please share it in the comments below. I would love to check it out! Cheers!

Почему модули в nodeJS подключаются по разному?

  • 1 подписчик
  • 17 часов назад
  • 31 просмотр

ответ
1

  • node.js
    • Node.js

    Простой

  • Step 3: Create Project Folder Copy link

    Now let’s make this bot work! Create a new project with the following terminal commands:

    mkdir discordBot
    cd discordBot
    npm init

    This will create a simple Node.js project in your ‘discordBot’ folder.

    Тут сказано поднять простой сервер на node.js. Можно ли такое поднять на Python?

    • 1 подписчик
    • 12 часов назад
    • 83 просмотра

    ответ
    1

  • windows
    • Windows

    • +1 ещё

    Простой

  • Read similar articles

    Implementing and Testing a Mongoose Model with CI/CD Integration

    Check out our tutorial
    Implementing and Testing a Mongoose Model with CI/CD Integration

    Securing our Docker image

    Check out our tutorial
    Securing our Docker image

    Optimizing Dockerfile for Node.js (Part 2)

    Check out our tutorial
    Optimizing Dockerfile for Node.js (Part 2)

    Как получить сообщение уже после нажатия кнопки в Aiogram?

    • 1 подписчик
    • вчера
    • 27 просмотров

    ответ
    1

  • python
    • Python

    • +2 ещё

    Простой

  • Как писать ботов для веб игр на питоне?

    • 1 подписчик
    • вчера
    • 81 просмотр

    ответа
    3

  • telegram
    • Telegram

    • +1 ещё

    Простой

  • Step 5: index.js Copy link

    In our project directory, run:

    touch index.js

    This will create an index.js file, where our bot functions will be written at.

    If you see the bot installed in your server, it is currently offline. The first thing we need to do to code our discord bot is to create a discord bot client and log our bot in.

    Import the discord.js package and create a new client like so:

    require(‘dotenv’).config(); //initialize dotenv
    const Discord = require(‘discord.js’); //import discord.js

    const client = new Discord.Client(); //create new client

    client.on(‘ready’, () => {
    console.log(`Logged in as ${client.user.tag}!`);
    });

    //make sure this line is the last line
    client.login(process.env.CLIENT_TOKEN); //login bot using token

    Remember the token we copied in Step 1? Create an .env file and store the token there.

    In your .env file:

    CLIENT_TOKEN=’your token here’

    Great, now if we run the command below, our bot should go online:

    node index.js

    The bot status has changed to online

    The bot status has changed to online.

    Step 7: Fetching from an API + Sending Images Copy link

    A bot that just replies “Pong!” whenever you type ping is not very useful, isn’t it? Let’s take it up a notch by asking the bot for an image. How about a meme, for example?

    We can type “meme” and the bot will fetch a meme from an API and send us a random meme!

    For best practice, bot commands usually start with an exclamation mark so let’s make it “!meme” instead to instruct the bot for a meme.

    For the API, we can use this simple one by jaychandra6. Upon the API call, it will return a data object with the following structure:

    {
    memes: [
    {
    author: ‘NaveenTheBean’,
    nsfw: false,
    subreddit: ‘memes’,
    title: ‘Have a Snickers’,
    upvotes: 15122,
    url: ‘https://i.redd.it/tde2okjfyaz61.jpg’
    }
    ] }

    We want the bot to send us the url property of this data, and it will appear as an image in Discord.

    So let’s create a function to get a meme. We’ll call it getMeme(). Here’s what it looks like in index.js:

    //add this function below client.on(‘message’ …
    async function getMeme(){
    const res = await axios.get(‘https://memeapi.pythonanywhere.com/’);
    return res.data.memes[0].url;
    }

    Don’t forget to import axios at the top of the file:

    const axios = require(‘axios’); //add this line at the top

    Now we can re-write our client.on(‘message’… block with our new !meme command:

    client.on(‘message’, async msg => {
    switch (msg.content) {
    case “ping”:
    msg.reply(“Pong!”);
    break;
    //our meme command below
    case “!meme”:
    msg.channel.send(“Here’s your meme!”); //Replies to user command
    const img = await getMeme(); //fetches an URL from the API
    msg.channel.send(img); //send the image URL
    break;
    }
    })

    To keep our discord bot code clean, let’s use switch-case statements instead of if blocks.

    As seen in the code above, when a user types !meme, the bot will first send “Here’s your meme!” then fetches the image URL by calling the getMeme() function. Finally, once the URL is retrieved, the bot will send it using msg.channel.send(img).

    When running the bot, it should work like below:

    Как залить node js приложение на сервер?

    • 1 подписчик
    • 18 часов назад
    • 38 просмотров

    ответ
    1

  • node.js
    • Node.js

    • +3 ещё

    Простой

  • Как установить статус участнику тг чата?

    • 1 подписчик
    • вчера
    • 32 просмотра

    ответов
    0

  • python
    • Python

    • +2 ещё

    Простой

  • Step 4: Install packages Copy link

    Now we need to install the npm packages for this project. Run this command below:

    npm install discord.js axios dotenv

    The packages we have installed are:

    • discord.js: a Node.js module to allow easy interactions with the Discord API.
    • axios: allows making HTTP Promises easily with Node.js.
    • dotenv: allows loading variables from process.env in Node apps.

    Step 8: Sending repeated messages Copy link

    Let’s add another cool command to our bot! How about we have our bot send us automated messages at set intervals?

    Do you know that looking at screens for more than an hour can cause eye strain and fatigue over time? For our hardworking developers, let’s make our bot remind us to take an eye break every hour.

    Let’s create an !eye command to allow a user to subscribe to eye reminders.

    let interval;

    client.on(‘message’, async msg => {
    switch (msg.content) {
    //other commands above here…
    case “!eye”:
    msg.channel.send(“You are now subscribed to eye reminders.”);
    interval = setInterval (function () {
    msg.channel.send(“Please take an eye break now!”)
    .catch(console.error);
    }, 3600000); //every hour
    break;
    }
    })

    Using setInterval, now the bot will send an eye reminder every hour. Let’s test this in 3-second intervals instead.

    Perfect, it works! But it doesn’t make sense to let the bot incessantly send us those reminders right? What if we want it to stop?

    Let’s create a !stop command to do that. We simply use clearInterval() to do that.

    If you are not sure about setInterval and clearInterval methods, please visit this site to read more about it.

    So here’s our !stop command:

    //add this below the !eye case block
    case “!stop”:
    msg.channel.send(“I have stopped eye reminders.”);
    clearInterval(interval);
    break;

    And it should work properly like below:

    Sending repeated messages

    Ошибка после деплоя telegram бота на heroku?

    • 1 подписчик
    • 18 часов назад
    • 5 просмотров

    ответов
    0

  • боты
    • Боты

    • +1 ещё

    Простой

  • Как в node.js на windows 10 запускать mp3 на фоне?

    • 2 подписчика
    • 14 часов назад
    • 49 просмотров

    ответа
    2

  • node.js
    • Node.js

    Простой

  • Вылезает ошибка при создании дс бота? что делать?

    • нет подписчиков
    • 21 час назад
    • 30 просмотров

    ответ
    1

  • боты
    • Боты

    Простой

  • Step 6: Writing your first bot command Copy link

    Let’s write a very simple bot command: when we type ping, the bot will reply us with “Pong!”.

    It is as simple as:

    client.on(‘message’, msg => {
    if (msg.content === ‘ping’) {
    msg.reply(‘Pong!’);
    }
    });

    Add this code block above your client.login(process.env.CLIENT_TOKEN); line and if you run node index.js again, your bot should reply you when you type ping.

    Great! And there you go, you have written your first bot command!

    Как сделать работу бота бесконечной?

    • 1 подписчик
    • вчера
    • 70 просмотров

    ответа
    2

  • Показать ещёЗагружается…
  • Вакансии с Хабр Карьеры

    Senior Node.js разработчик

    NEWHR
    •Москва
    от 270 000 до 400 000 ₽

    Backend разработчик (Node.js)

    Wazzup

    от 100 000 до 150 000 ₽

    Fullstack Node.js / Vue.js Developer

    Fundraise Up

    от 2 500 до 4 500 $
    Ещё вакансии

    Заказы с Хабр Фриланса

    Создать страницу «Работа администратора с предложениями экспертов»

    21 окт. 2022, в 11:59
    1000 руб./за проект

    Реализовать бэк на Laravel

    21 окт. 2022, в 11:53
    100000 руб./за проект

    В мобильной версии “Каталог” заменить на бургер с выпадающим списком

    21 окт. 2022, в 11:48
    300 руб./за проект
    Ещё заказы

    Минуточку внимания

    Присоединяйтесь к сообществу, чтобы узнавать новое и делиться знаниями

    Зарегистрироваться

    Самое интересное за 24 часа

    • Почему из-за плагина w3tc не открывается страница?

      • 2 подписчика
      • 0 ответов
    • Smartctl ругается на нечитаемые сектора, но MegaCli делает вид, что всё в порядке, кому верить?

      • 2 подписчика
      • 0 ответов
    • Какая погрешность в количестве фиксаций целевых событий в Яндекс метрике допустима?

      • 2 подписчика
      • 0 ответов
    • Почему в Chrome не отображается круг, а получается квадрат?

      • 2 подписчика
      • 1 ответ
    • Как умножить матрицы с помощью SSE?

      • 3 подписчика
      • 0 ответов
    • Как сделать аутентификацию по номеру телефона?

      • 4 подписчика
      • 0 ответов
    • Как подождать асинхронного выполнения всех подписчиков события?

      • 3 подписчика
      • 0 ответов
    • Ломается весь код в Sublime Text?

      • 3 подписчика
      • 1 ответ
    • Периодически падает сайт с ошибкой 502 как найти проблему?

      • 3 подписчика
      • 2 ответа
    • Какой компилятор выбрать для C++?

      • 2 подписчика
      • 3 ответа
    • © Habr
    • О сервисе
    • Обратная связь
    • Блог
    Источники

    • https://webformyself.com/top-10-oshibok-javascript-iz-1000-proektov-i-kak-ix-izbezhat/
    • https://buddy.works/tutorials/how-to-build-a-discord-bot-in-node-js-for-beginners
    • https://qna.habr.com/q/1052656
    [свернуть]
    Решите Вашу проблему!


    ×
    Adblock
    detector