Как мне отлаживать подобные ошибки javascript?

#javascript

#javascript

Вопрос:

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

 let ws = new WebSocket("ws://echo.websocket.org/");
ws.onmessage = msg => console.log(msg);
let queue = [];
ws.onopen = () => {
    queue.forEach(msg => ws.send(msg));
};

const send = () => {
    if(ws.readyState === ws.OPEN){
        ws.send(msg);
    }
    else{
      queue.push(msg);
    }
};

send("foo");
send("bar");
  

Затем я понял, что мне нужно : let send = (msg) => { .

Прежде чем обнаружить проблему, я использовал инструменты lint и dev, но я не видел никаких предупреждений. Что я должен делать, чтобы найти какие-то проблемы?

http://www.es6fiddle.net/iu3qwem6/

Комментарии:

1. Разве у вас нет ошибки » ReferenceError: сообщение об ошибке не определено «?

2. @Нет, я не вижу этого предупреждения. Я использую Firefox 49.0.1. Должен ли я использовать что-то еще?

3. Я нахожусь на 50.0b3, и когда я копирую ваш код в ES6Fiddle, я получил сообщение об ошибке из babel.js

4. @Kaiido Если я запущу es6fiddle.net/iu3r5ofj Я ничего не вижу в окне консоли devtools. Я регистрирую ошибки, предупреждения, информацию, журнал.

5. просто попробовал в старом FF38, в FF47 и в последней стабильной версии 49.0.1, и у меня всегда есть сообщение…

Ответ №1:

eslint. Для этого даже есть специальное правило: http://eslint.org/docs/rules/no-undef

Вероятно, вы должны получить ReferenceError , потому что ваш let / const подразумевает строгий синтаксис, хотя, если вы пропустили это, я предполагаю, что ваш движок по какой-либо причине не работал в строгом режиме. В любом случае, эту ошибку лучше найти с помощью статического анализа, потому что он обнаружит ошибку, даже если функция никогда не вызывалась.

Ответ №2:

Я рекомендую вам попробовать TypeScript. Взгляните на свой пример на console.log(msg);
let queue = [];
ws.onopen = () => {
queue.forEach(msg => ws.send(msg));
};

const send = () => {
if(ws.readyState === ws.OPEN){
ws.send(msg);
}
else{
queue.push(msg);
}
};

send(«foo»);
send(«bar»);» rel=»nofollow»>TypeScript playground
.

Он сразу же сообщит вам: Cannot find name msg внутри вашей send функции.