Перед самим списком, давайте швидко поглянемо на структуру повідомлення про помилку. Розуміння структури допомагає розуміти помилки, і ви отримаєте менше проблем, якщо натрапите на помилки, не представлені в цьому списку.
Типова помилка з Chrome виглядає так:
Тепер до самих помилок.
Uncaught TypeError: undefined is not a function
Пов'язані помилки: number is not a function, object is not a function, string is not a function, Unhandled Error: 'foo' is not a function, Function Expected
Виникає при спробі виклику значення як функції, коли значення функцією не є. наприклад:
Ця помилка зазвичай виникає, якщо ви намагаєтеся викликати функцію для об'єкта, але опечатали в назві.
Неіснуючі властивості об'єкта за замовчуванням мають значення undefined. що призводить до цієї помилку.
Інші варіації, такі як "number is not a function" виникають при спробі викликати число, як ніби воно є функцією.
Як виправити помилку: переконайтеся в коректності імені функції. Для цієї помилки, номер рядка зазвичай вказує в правильне місце.
Uncaught ReferenceError: Invalid left-hand side in assignment
Пов'язані помилки: Uncaught exception: ReferenceError: Can not assign to 'functionCall ()', Uncaught exception: ReferenceError: Can not assign to 'this'
Викликано спробою привласнити значення тому, чому неможливо привласнити значення.
Найбільш частий приклад цієї помилки - це умова в if:
У цьому прикладі програміст випадково використав один знак рівності замість двох. Вираз "left-hand side in assignment" відноситься до лівої частини знака рівності, а, як можна бачити в даному прикладі, ліва частина містить щось, чого не можна привласнити значення, що і призводить до помилки.
Як виправити помилку: переконайтеся, що ви не намагаєтеся привласнити значення результату функції або ключовим словом this.
Uncaught TypeError: Converting circular structure to JSON
Пов'язані помилки: Uncaught exception: TypeError: JSON.stringify: Not an acyclic Object, TypeError: cyclic object value, Circular reference in value argument not supported
Завжди викликано циклічної посиланням в об'єкті, яка потім передається в JSON.stringify.
Так як a і b в прикладі вище мають посилання один на одного, результуючий об'єкт не може бути приведений до JSON.
Як виправити помилку: видаліть циклічні посилання, як у прикладі вище, з усіх об'єктів, які ви хочете конвертувати в JSON.
Unexpected token;
Пов'язані помилки: Expected), missing) after argument list
Токен в даній помилку може бути різним - може бути написано "Unexpected token]", "Expected
Як виправити помилку: іноді номер рядка не вказує на правильне місце розташування, що ускладнює виправлення помилки.
Помилка з [] <> () Зазвичай викликано незбіжними парою. Перевірте, чи всі ваші дужки мають закриває пару. В цьому випадку, номер рядка зазвичай вказує на щось інше, а не на проблемний символ.
Unexpected / пов'язано з регулярними виразами. Номер рядка для даного випадку зазвичай правильний.
Unexpected; зазвичай це пов'язано з символом; всередині литерала об'єкта або масиву, або списку аргументів виклику функції. Номер рядка зазвичай також буде вірним для даного випадку.
Uncaught SyntaxError: Unexpected token ILLEGAL
Пов'язані помилки: Unterminated String Literal, Invalid Line Terminator
У строковому літералі пропущена закриваюча лапка.
Як виправити помилку: переконайтеся, що всі рядки мають правильні закривають лапки.
Uncaught TypeError: Can not read property 'foo' of null, Uncaught TypeError: Can not read property 'foo' of undefined
Пов'язані помилки: TypeError: someVal is null, Unable to get property 'foo' of undefined or null reference
Спроба прочитати null або undefined так, як ніби це об'єкт. наприклад:
Як виправити помилку: зазвичай це пов'язано з помилками. Перевірте, чи всі змінні, використані поруч з рядком, що вказує на помилку, правильно названі.
Uncaught TypeError: Can not set property 'foo' of null, Uncaught TypeError: Can not set property 'foo' of undefined
Пов'язані помилки: TypeError: someVal is undefined, Unable to set property 'foo' of undefined or null reference
Спроба записати null або undefined так, як ніби це об'єкт. наприклад:
Як виправити помилку: це теж зазвичай це пов'язано з помилками. Перевірте імена змінних поруч з рядком, що вказує на помилку.
Uncaught RangeError: Maximum call stack size exceeded
Пов'язані помилки: Uncaught exception: RangeError: Maximum recursion depth exceeded, too much recursion, Stack overflow
Зазвичай викликано неправильно програмної логікою, що призводить до нескінченного викликом рекурсивної функції.
Як виправити помилку: перевірте рекурсивні функції на помилки, які можуть змусити їх робити рекурсивні виклики вічно.
Uncaught URIError: URI malformed
Пов'язані помилки: URIError: malformed URI sequence
Викликано некоректним викликом decodeURIComponent.
Як виправити помилку: переконайтеся, що виклики decodeURIComponent на рядку помилки отримують коректні вхідні дані.
XMLHttpRequest can not load some / url. No 'Access-Control-Allow-Origin' header is present on the requested resource
Пов'язані помилки: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at some / url
Ця проблема завжди пов'язана з використанням XMLHttpRequest.
Як виправити помилку: переконайтеся в коректності запитуваної URL і в тому, що він задовольняє same-origin policy. Хороший спосіб знайти проблемний код - подивитися на URL в повідомленні помилки і знайти його в своєму коді.
InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
Пов'язані помилки: InvalidStateError, DOMException code 11
Чи означає те, що код викликав функцію, яку не можна було викликати в поточному стані. Зазвичай пов'язано c XMLHttpRequest при спробі викликати на ньому функції до його готовності.
В даному випадку ви отримаєте помилку тому, що функція setRequestHeader може бути викликана тільки після виклику xhr.open.
Як виправити помилку: подивіться на код в рядку, що вказує на помилку, і переконайтеся, що він викликається в правильний момент або додає потрібні виклики до цього (як з xhr.open).
висновок
P.S. Цей переклад можна поліпшити, відправивши PR тут.
Добре-добре, розверну думка для тих, хто не зрозумів. Коли ви використовуєте jQuery, помилка типу «Uncaught TypeError: undefined is not a function», яка відбулася в надрах вашої функції, наприклад, обробника кліка по посиланню / кнопці / ітп буде показувати куди завгодно, тільки не на вашу функцію. В принципі навіть не поруч. Можна тільки здогадатися, що останній раз ти міняв там-то і можливо. десь там щось десь не враховано або не там стоїть кома (на які яваскрипт вообщем-то теж покласти і повідомлення про помилку теж буде вести куди завгодно, крім вашої функції з помилкою)
гиги, jquery, в основному, вішають на елементи DOM'а, а тут все просто і дебажіть та інше.
моє улюблене: jquery плагін (слайдер картинок) на конкретній сторінці сайту падає всередині себе з повідомленням про «undefined is not a function». Падає тільки на цій сторінці, при цьому сам плагін роками успішно застосовується і працює на купі сайтів без будь-яких проблем. Причина? Інший скрипт підтягнув ззовні іншу версію jQuery і в результаті у нас на сторінці виявляється два jQuery різних версій. Причому самі-то функції jQuery дану ситуацію якось примудряються розрулювати ...
За вказаною помилку налагоджувати дану проблему можна дуже і дуже довго, особливо якщо ви не в курсі останніх змін в коді.
Налагодження в консолі браузера - це біль.
Ну, девтулзи хрому вам наприклад покажуть повний стек викликів, і там ви знайдете номер рядка в вашому файлі, з якої все почалося