Error line 1 unexpected token illegal

C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3391 throw error; ^ Error: Line 1: Unexpected token ILLEGAL at ErrorHandler.constr...

@Alecell

C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3391
throw error;
^
Error: Line 1: Unexpected token ILLEGAL
at ErrorHandler.constructError (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3396:22)
at ErrorHandler.createError (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3414:27)
at ErrorHandler.throwError (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3422:21)
at Scanner.throwUnexpectedToken (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3505:28)
at Scanner.scanPunctuator (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:4026:19)
at Scanner.lex (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:4628:22)
at Tokenizer.getNextToken (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:6366:43)
at Object.tokenize (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:136:36)
at Object.parseRegEx (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentlibutils.js:37:13)
at parser (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentlibparser.js:34:27)

I get this error message when try to run the gulp task, I tryed to solve the error but it was unsuccessful.

@vitaly-t

So you must be sending an invalid javascript file into it.

@Alecell

I just remove all the .js files in my project and get the same error.

@vitaly-t

  1. Find which file + extension it complains about
  2. Post either the while file here or the line where it complains
  3. Post which decomment method you are using to process the file

Then it will be possible to assist you further.

@sverrirs

Same issue, there is a problem when you specify wildcards such as ‘/**/*’ in the gulp.src preceding the strip task.

What happens is that the file discovery in the through.obj call goes up a directory and loads files from there.

Given this file structure

root
    src
    dest
    gulpfile.js

Using this gulp command

return gulp.src('dest/*/**''] )
    .pipe(strip())
    .pipe(gulp.dest('dest'));

Will actually load files from ‘root/**’ and not just from ‘root/dest/’

@vitaly-t

@sverrirs try gulp-decomment instead, which does the same ;)

@BuffMcBigHuge

I solved this issue by rewriting division statements.

Original:

var lng = _.reduce(userList, function(memo, userElement) {
    if (userElement.location.coordinates[0] !== 0) {
        j++;
        return memo + userElement.location.coordinates[0];
    }
    else
        return memo;
}, 0) / (j === 0 ? 1 : j);

Fix:

var lng = _.reduce(userList, function(memo, userElement) {
    if (userElement.location.coordinates[0] !== 0) {
        j++;
        return memo + userElement.location.coordinates[0];
    }
    else
        return memo;
}, 0);

lng = lng / (j === 0 ? 1 : j);

@jessedegans

@sverrirs try gulp-decomment instead, which does the same ;)

Produces exactly the same error though

The error

When code is parsed by the JavaScript interpreter, it gets broken into pieces called «tokens». When a token cannot be classified into one of the four basic token types, it gets labelled «ILLEGAL» on most implementations, and this error is thrown.

The same error is raised if, for example, you try to run a js file with a rogue @ character, a misplaced curly brace, bracket, «smart quotes», single quotes not enclosed properly (e.g. this.run('dev1)) and so on.

A lot of different situations can cause this error. But if you don’t have any obvious syntax error or illegal character, it may be caused by an invisible illegal character. That’s what this answer is about.

But I can’t see anything illegal!

There is an invisible character in the code, right after the semicolon. It’s the Unicode U+200B Zero-width space character (a.k.a. ZWSP, HTML entity ). That character is known to cause the Unexpected token ILLEGAL JavaScript syntax error.

And where did it come from?

I can’t tell for sure, but my bet is on jsfiddle. If you paste code from there, it’s very likely to include one or more U+200B characters. It seems the tool uses that character to control word-wrapping on long strings.

UPDATE 2013-01-07

After the latest jsfiddle update, it’s now showing the character as a red dot like codepen does. Apparently, it’s also not inserting U+200B characters on its own anymore, so this problem should be less frequent from now on.

UPDATE 2015-03-17

Vagrant appears to sometimes cause this issue as well, due to a bug in VirtualBox. The solution, as per this blog post is to set sendfile off; in your nginx config, or EnableSendfile Off if you use Apache.

It’s also been reported that code pasted from the Chrome developer tools may include that character, but I was unable to reproduce that with the current version (22.0.1229.79 on OSX).

How can I spot it?

The character is invisible, do how do we know it’s there? You can ask your editor to show invisible characters. Most text editors have this feature. Vim, for example, displays them by default, and the ZWSP shows as <u200b>. You can also debug it online: jsbin displays the character as a red dot on its code panes (but seems to remove it after saving and reloading the page). CodePen.io also displays it as a dot, and keeps it even after saving.

Related problems

That character is not something bad, it can actually be quite useful. This example on Wikipedia demonstrates how it can be used to control where a long string should be wrapped to the next line. However, if you are unaware of the character’s presence on your markup, it may become a problem. If you have it inside of a string (e.g., the nodeValue of a DOM element that has no visible content), you might expect such string to be empty, when in fact it’s not (even after applying String.trim).

ZWSP can also cause extra whitespace to be displayed on an HTML page, for example when it’s found between two <div> elements (as seen on this question). This case is not even reproducible on jsfiddle, since the character is ignored there.

Another potential problem: if the web page’s encoding is not recognized as UTF-8, the character may actually be displayed (as ​ in latin1, for example).

If ZWSP is present on CSS code (inline code, or an external stylesheet), styles can also not be parsed properly, so some styles don’t get applied (as seen on this question).

The ECMAScript Specification

I couldn’t find any mention to that specific character on the ECMAScript Specification (versions 3 and 5.1). The current version mentions similar characters (U+200C and U+200D) on Section 7.1, which says they should be treated as IdentifierParts when «outside of comments, string literals, and regular expression literals». Those characters may, for example, be part of a variable name (and var xu200c; indeed works).

Section 7.2 lists the valid White space characters (such as tab, space, no-break space, etc.), and vaguely mentions that any other Unicode “space separator” (category “Zs”) should be treated as white space. I’m probably not the best person to discuss the specs in this regard, but it seems to me that U+200B should be considered white space according to that, when in fact the implementations (at least Chrome and Firefox) appear to treat them as an unexpected token (or part of one), causing the syntax error.

Содержание

  1. Unespected token ILLEGAL — esprima.js #20
  2. Comments
  3. Ошибки в JavaScript и как их исправить
  4. Как читать ошибки?
  5. Uncaught TypeError: undefined is not a function
  6. Uncaught ReferenceError: Invalid left-hand side in assignment
  7. Uncaught TypeError: Converting circular structure to JSON
  8. Unexpected token ;
  9. Uncaught SyntaxError: Unexpected token ILLEGAL
  10. Uncaught TypeError: Cannot read property ‘foo’ of null, Uncaught TypeError: Cannot read property ‘foo’ of undefined
  11. Uncaught TypeError: Cannot set property ‘foo’ of null, Uncaught TypeError: Cannot set property ‘foo’ of undefined
  12. Uncaught RangeError: Maximum call stack size exceeded
  13. Uncaught URIError: URI malformed
  14. XMLHttpRequest cannot load some/url. No ‘Access-Control-Allow-Origin’ header is present on the requested resource
  15. InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
  16. Заключение
  17. Нет видимой причины для » Unexpected token ILLEGAL»
  18. 10 ответов
  19. ошибка
  20. но я не вижу ничего противозаконного!
  21. и откуда он взялся?
  22. как я могу определить это?
  23. обзоры проблемы
  24. Спецификация ECMAScript

Unespected token ILLEGAL — esprima.js #20

C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3391
throw error;
^
Error: Line 1: Unexpected token ILLEGAL
at ErrorHandler.constructError (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3396:22)
at ErrorHandler.createError (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3414:27)
at ErrorHandler.throwError (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3422:21)
at Scanner.throwUnexpectedToken (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:3505:28)
at Scanner.scanPunctuator (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:4026:19)
at Scanner.lex (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:4628:22)
at Tokenizer.getNextToken (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:6366:43)
at Object.tokenize (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentnode_modulesesprimadistesprima.js:136:36)
at Object.parseRegEx (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentlibutils.js:37:13)
at parser (C:wampwwwreiPalletnode_modulesgulp-strip-commentsnode_modulesdecommentlibparser.js:34:27)

I get this error message when try to run the gulp task, I tryed to solve the error but it was unsuccessful.

The text was updated successfully, but these errors were encountered:

So you must be sending an invalid javascript file into it.

I just remove all the .js files in my project and get the same error.

  1. Find which file + extension it complains about
  2. Post either the while file here or the line where it complains
  3. Post which decomment method you are using to process the file

Then it will be possible to assist you further.

Источник

Ошибки в JavaScript и как их исправить

JavaScript может быть кошмаром при отладке: некоторые ошибки, которые он выдает, могут быть очень трудны для понимания с первого взгляда, и выдаваемые номера строк также не всегда полезны. Разве не было бы полезно иметь список, глядя на который, можно понять смысл ошибок и как исправить их? Вот он!

Ниже представлен список странных ошибок в JavaScript. Разные браузеры могут выдавать разные сообщения об одинаковых ошибках, поэтому приведено несколько примеров там, где возможно.

Как читать ошибки?

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

Типичная ошибка из Chrome выглядит так:

Структура ошибки следующая:

  1. Uncaught TypeError: эта часть сообщения обычно не особо полезна. Uncaught значит, что ошибка не была перехвачена в catch , а TypeError — это название ошибки.
  2. undefined is not a function: это та самая часть про ошибку. В случае с сообщениями об ошибках, читать их нужно прямо буквально. Например, в этом случае, она значит то, что код попытался использовать значение undefined как функцию.

Другие webkit-браузеры, такие как Safari, выдают ошибки примерно в таком же формате, как и Chrome. Ошибки из Firefox похожи, но не всегда включают в себя первую часть, и последние версии Internet Explorer также выдают более простые ошибки, но в этом случае проще — не всегда значит лучше.

Теперь к самим ошибкам.

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: Cannot assign to ‘functionCall()’, Uncaught exception: ReferenceError: Cannot 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

Интерпретатор JavaScript что-то ожидал, но не обнаружил там этого. Обычно вызвано пропущенными фигурными, круглыми или квадратными скобками.

Токен в данной ошибке может быть разным — может быть написано “Unexpected token ]”, “Expected <” или что-то еще.

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

Ошибка с [ ] < >( ) обычно вызвано несовпадающей парой. Проверьте, все ли ваши скобки имеют закрывающую пару. В этом случае, номер строки обычно указывает на что-то другое, а не на проблемный символ.

Unexpected / связано с регулярными выражениями. Номер строки для данного случая обычно правильный.

Unexpected; обычно вызвано символом; внутри литерала объекта или массива, или списка аргументов вызова функции. Номер строки обычно также будет верным для данного случая.

Uncaught SyntaxError: Unexpected token ILLEGAL

Связанные ошибки: Unterminated String Literal, Invalid Line Terminator

В строковом литерале пропущена закрывающая кавычка.

Как исправить ошибку: убедитесь, что все строки имеют правильные закрывающие кавычки.

Uncaught TypeError: Cannot read property ‘foo’ of null, Uncaught TypeError: Cannot read property ‘foo’ of undefined

Связанные ошибки: TypeError: someVal is null, Unable to get property ‘foo’ of undefined or null reference

Попытка прочитать null или undefined так, как будто это объект. Например:

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

Uncaught TypeError: Cannot set property ‘foo’ of null, Uncaught TypeError: Cannot 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 cannot 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 ).

Заключение

JavaScript содержит в себе одни из самых бесполезных ошибок, которые я когда-либо видел, за исключением печально известной Expected T_PAAMAYIM_NEKUDOTAYIM в PHP. Большая ознакомленность с ошибками привносит больше ясности. Современные браузеры тоже помогают, так как больше не выдают абсолютно бесполезные ошибки, как это было раньше.

Какие самые непонятные ошибки вы встречали? Делитесь своими наблюдениями в комментариях.

Источник

Нет видимой причины для » Unexpected token ILLEGAL»

Я получаю эту ошибку JavaScript на своей консоли:

Uncaught SyntaxError: неожиданный токен незаконный

это очень просто, как вы можете видеть. Как это может быть причиной синтаксической ошибки?

10 ответов

ошибка

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

та же ошибка возникает, если, например, вы пытаетесь запустить JS-файл с rogue @ символ, неуместная фигурная скобка, скобка, «умные кавычки», одинарные кавычки не прилагается должным образом (например, this.run(‘dev1) ) и так далее.

много разных ситуаций может вызвать эту ошибку. Но если у вас нет очевидной синтаксической ошибки или незаконного символа, это может быть вызвано невидимка незаконный характер. Вот о чем этот ответ.

но я не вижу ничего противозаконного!

в коде есть невидимый символ, сразу после точки с запятой. Это Юникод U+200B нулевой ширины пространства символ (a.к. a. ZWSP , HTML entity ​ ). Этот персонаж вызывает Unexpected token ILLEGAL синтаксическая ошибка JavaScript.

и откуда он взялся?

я не могу сказать точно, но моя ставка на jsfiddle. Если вы вставляете код оттуда, он, скорее всего, будет включать один или несколько U+200B символы. Кажется, инструмент использует этот символ для управления переносом слов на длинные строки.

после обновить jsfiddle, теперь он показывает символ в виде красной точки как это делает codepen. видимо, он также не вставляет U+200B символы сами по себе больше, поэтому эта проблема должна быть менее частой с этого момента.

обновления 2015-03-17

залетный иногда вызывает эту проблему как ну, из-за ошибки в VirtualBox. Решение, согласно этот блог установить sendfile off; в конфигурации nginx или EnableSendfile Off если вы используете Apache.

также об этом сообщает этот код, вставленный из инструментов разработчика Chrome, может включать этот символ, но я не смог воспроизвести его с текущей версией (22.0.1229.79 на OSX).

как я могу определить это?

характер невидим, сделайте откуда мы знаем, что он там? Вы можете попросить редактора показать невидимые символы. Большинство текстовых редакторов имеют эту функцию. Vim, например, отображает их по умолчанию, а ZWSP показывает, как . Вы также можете отладить его в интернете:jsbin отображает символ в виде красной точки на его кодовых панелях (но, похоже, удаляет его после сохранения и перезагрузки страницы). CodePen.io также отображает его как точку, и сохраняет его даже после сохранения.

обзоры проблемы

этот персонаж не является чем-то плохим, он действительно может быть весьма полезным. этот пример в Википедии демонстрирует, как его можно использовать для управления, где длинная строка должна быть обернута в следующую строку. Однако, если вы не знаете о присутствии персонажа в разметке, это может стать проблемой. Если у вас есть это внутри строки (например, nodeValue в DOM-элемент, который не имеет видимого содержимого), вы можете ожидать, что такая строка будет пустой, когда на самом деле это не так (даже после применения String.trim ).

ZWSP может также вызвать дополнительные пробелы, которые будут отображаться на HTML-странице, например, когда он находится между двумя

еще одна потенциальная проблема: если кодировка веб-страницы не распознается как UTF-8, символ может фактически отображаться (как ​ в latin1, для образец.)

если ZWSP присутствует в коде CSS (встроенный код или внешняя таблица стилей), стили также не могут быть проанализированы должным образом, поэтому некоторые стили не применяются (как видно на этот вопрос).

Спецификация ECMAScript

я не смог найти упоминания об этом конкретном персонаже в спецификации ECMAScript (версии 3 и 5.1). В текущей версии упоминаются похожие символы ( U+200C и U+200D ) on 7.1, который говорит, что они должны рассматриваться как IdentifierPart s, когда «вне комментариев, строковых литералов и литералов регулярных выражений». Эти символы могут, например, быть частью имени переменной (и var xu200c; действительно работает).

7.2 перечисляет допустимые символы пробела(например, tab, space, no-break space и т. д.), и смутно упоминает, что любой другой Юникод «разделитель пространства» (категория «Zs») должен быть обработан как белое пространство. Я, вероятно, не лучший человек для обсуждения спецификаций в этом отношении, но мне кажется, что U+200B следует считать пробелом в соответствии с этим, когда на самом деле реализации (по крайней мере, Chrome и Firefox), по-видимому, рассматривают их как неожиданный токен (или часть одного), вызывая синтаксическую ошибку.

почему вы ищете эту проблему в своем коде? Даже, если он перепечатан.

если вы видите, что именно происходит после сохранения файла в синхронизированной папке — вы увидите что-то вроде ***** в конце файла. Это вообще не связано с вашим кодом.

решение.

если вы используете nginx в окне vagrant-добавить в конфигурацию сервера:

если вы используете apache in vagrant box-добавить на сервер config:

Это также может произойти, если вы копируете код из другого документа (например, PDF) в консоль и пытаетесь запустить его.

Я пытался запустить пример кода из книги Javascript, которую я читаю, и был удивлен, что он не работает в консоли.

по-видимому, копирование из PDF вводит некоторые неожиданные, незаконные и невидимые символы в код.

Я получил эту ошибку в chrome, когда у меня была unterminated строка после строки, на которую указывала ошибка. После закрытия строки ошибка исчезла.

пример с ошибкой:

пример без ошибки:

У меня была такая же проблема на моем mac и оказалось, что это потому, что Mac заменял стандартные кавычки на фигурные кавычки, которые являются незаконными символами javascript.

чтобы исправить это, мне пришлось изменить настройки на моем mac System Preferences= > Keyboard=>Text (tab) снимите флажок использовать смарт-кавычки и тире (по умолчанию был установлен).

Если вы используете nginx + uwsgi setup vagrant, то основной проблемой является ошибка виртуального окна с файлом отправки, как указано в некоторых ответах. Однако для его решения вам нужно отключить sendfile как в nginx, так и в uwsgi.

в nginx.conf функция sendfile от

uwsgi application / config —отключение-использования sendfile

при запуске OS X файловая система создает скрытые вилки в основном всех ваших файлов, если они находятся на жестком диске, который не поддерживает HFS+. Иногда это может (случилось со мной только что) привести к тому, что ваш движок JavaScript попытается запустить Data-fork вместо кода, который вы собираетесь запустить. Когда это произойдет, вы также получите

потому что вилка данных вашего файла будет содержать символ Unicode U+200B. Удаление файла Data fork заставит ваш скрипт работать ваш фактический, предполагаемый код вместо двоичной вилки данных вашего кода.

.что угодно: эти файлы создаются на томах, которые изначально не поддерживают полные характеристики файлов HFS (например, Тома ufs, файлы Windows и т. д.). Когда файл Mac копируется на такой Том, его вилка данных хранится под обычным именем файла, а дополнительная информация HFS (вилка ресурсов, коды типа и создателя и т. д.) хранится во втором файле (в формате AppleDouble) с имя, которое начинается с «.«. (Эти файлы, конечно, невидимы для OS-X, но не для других ОС; это иногда может раздражать. )

У меня была такая же проблема, и это произошло, потому что я нажал клавишу enter при добавлении кода в текстовую строку.

потому что это была длинная строка текста, я хотел увидеть все это без необходимости прокручивать в моем текстовом редакторе, однако нажатие enter добавило невидимый символ в строку, которая была незаконной. Я использовал Sublime Text в качестве редактора.

Я изменил все области пространства на &nbsp, просто так, и это сработало без проблем.

Источник

Я получаю эту ошибку JavaScript на своей консоли:

Uncaught SyntaxError: неожиданный токен незаконный

Это мой код:

var foo = 'bar';​

это очень просто, как вы можете видеть. Как это может быть причиной синтаксической ошибки?

10 ответов


ошибка

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

та же ошибка возникает, если, например, вы пытаетесь запустить JS-файл с rogue @ символ, неуместная фигурная скобка, скобка, «умные кавычки», одинарные кавычки не прилагается должным образом (например,this.run('dev1)) и так далее.

много разных ситуаций может вызвать эту ошибку. Но если у вас нет очевидной синтаксической ошибки или незаконного символа, это может быть вызвано невидимка незаконный характер. Вот о чем этот ответ.

но я не вижу ничего противозаконного!

в коде есть невидимый символ, сразу после точки с запятой. Это Юникод U+200B нулевой ширины пространства символ (a.к. a. ZWSP, HTML entity ). Этот персонаж вызывает Unexpected token ILLEGAL синтаксическая ошибка JavaScript.

и откуда он взялся?

я не могу сказать точно, но моя ставка на jsfiddle. Если вы вставляете код оттуда, он, скорее всего, будет включать один или несколько U+200B символы. Кажется, инструмент использует этот символ для управления переносом слов на длинные строки.

обновление 2013-01-07

после обновить jsfiddle, теперь он показывает символ в виде красной точки как это делает codepen. видимо, он также не вставляет U+200B символы сами по себе больше, поэтому эта проблема должна быть менее частой с этого момента.

обновления 2015-03-17

залетный иногда вызывает эту проблему как ну, из-за ошибки в VirtualBox. Решение, согласно этот блог установить sendfile off; в конфигурации nginx или EnableSendfile Off если вы используете Apache.

также об этом сообщает этот код, вставленный из инструментов разработчика Chrome, может включать этот символ, но я не смог воспроизвести его с текущей версией (22.0.1229.79 на OSX).

как я могу определить это?

характер невидим, сделайте откуда мы знаем, что он там? Вы можете попросить редактора показать невидимые символы. Большинство текстовых редакторов имеют эту функцию. Vim, например, отображает их по умолчанию, а ZWSP показывает, как <u200b>. Вы также можете отладить его в интернете:jsbin отображает символ в виде красной точки на его кодовых панелях (но, похоже, удаляет его после сохранения и перезагрузки страницы). CodePen.io также отображает его как точку, и сохраняет его даже после сохранения.

обзоры проблемы

этот персонаж не является чем-то плохим, он действительно может быть весьма полезным. этот пример в Википедии демонстрирует, как его можно использовать для управления, где длинная строка должна быть обернута в следующую строку. Однако, если вы не знаете о присутствии персонажа в разметке, это может стать проблемой. Если у вас есть это внутри строки (например,nodeValue в DOM-элемент, который не имеет видимого содержимого), вы можете ожидать, что такая строка будет пустой, когда на самом деле это не так (даже после применения String.trim).

ZWSP может также вызвать дополнительные пробелы, которые будут отображаться на HTML-странице, например, когда он находится между двумя <div> элементы (как показано на этот вопрос). Этот случай даже не воспроизводим на jsfiddle, так как символ игнорируется там.

еще одна потенциальная проблема: если кодировка веб-страницы не распознается как UTF-8, символ может фактически отображаться (как ​ в latin1, для образец.)

если ZWSP присутствует в коде CSS (встроенный код или внешняя таблица стилей), стили также не могут быть проанализированы должным образом, поэтому некоторые стили не применяются (как видно на этот вопрос).

Спецификация ECMAScript

я не смог найти упоминания об этом конкретном персонаже в спецификации ECMAScript (версии 3 и 5.1). В текущей версии упоминаются похожие символы (U+200C и U+200D) on 7.1, который говорит, что они должны рассматриваться как IdentifierParts, когда «вне комментариев, строковых литералов и литералов регулярных выражений». Эти символы могут, например, быть частью имени переменной (и var xu200c; действительно работает).

7.2 перечисляет допустимые символы пробела(например, tab, space, no-break space и т. д.), и смутно упоминает, что любой другой Юникод «разделитель пространства» (категория «Zs») должен быть обработан как белое пространство. Я, вероятно, не лучший человек для обсуждения спецификаций в этом отношении, но мне кажется, что U+200B следует считать пробелом в соответствии с этим, когда на самом деле реализации (по крайней мере, Chrome и Firefox), по-видимому, рассматривают их как неожиданный токен (или часть одного), вызывая синтаксическую ошибку.


почему вы ищете эту проблему в своем коде? Даже, если он перепечатан.

если вы видите, что именно происходит после сохранения файла в синхронизированной папке — вы увидите что-то вроде ***** в конце файла. Это вообще не связано с вашим кодом.

решение.

если вы используете nginx в окне vagrant-добавить в конфигурацию сервера:

sendfile off;

если вы используете apache in vagrant box-добавить на сервер config:

EnableSendfile Off;

источник проблемы: Ошибка VirtualBox

62

автор: Nikolay Fominyh


Это также может произойти, если вы копируете код из другого документа (например, PDF) в консоль и пытаетесь запустить его.

Я пытался запустить пример кода из книги Javascript, которую я читаю, и был удивлен, что он не работает в консоли.

по-видимому, копирование из PDF вводит некоторые неожиданные, незаконные и невидимые символы в код.


Я получил эту ошибку в chrome, когда у меня была unterminated строка после строки, на которую указывала ошибка. После закрытия строки ошибка исчезла.

пример с ошибкой:

var file = files[i]; // SyntaxError: Unexpected token ILLEGAL

jQuery('#someDiv').innerHTML = file.name + " (" + formatSize(file.size) + ") "
    + "<a href="javascript: something('"+file.id+');">Error is here</a>";

пример без ошибки:

var file = files[i]; // No error

jQuery('#someDiv').innerHTML = file.name + " (" + formatSize(file.size) + ") "
    + "<a href="javascript: something('"+file.id+"');">Error was here</a>";

У меня была такая же проблема на моем mac и оказалось, что это потому, что Mac заменял стандартные кавычки на фигурные кавычки, которые являются незаконными символами javascript.

чтобы исправить это, мне пришлось изменить настройки на моем mac System Preferences= > Keyboard=>Text (tab) снимите флажок использовать смарт-кавычки и тире (по умолчанию был установлен).


Если вы используете nginx + uwsgi setup vagrant, то основной проблемой является ошибка виртуального окна с файлом отправки, как указано в некоторых ответах. Однако для его решения вам нужно отключить sendfile как в nginx, так и в uwsgi.

  1. в nginx.conf
    функция sendfile от

  2. uwsgi application / config
    —отключение-использования sendfile


при запуске OS X файловая система создает скрытые вилки в основном всех ваших файлов, если они находятся на жестком диске, который не поддерживает HFS+. Иногда это может (случилось со мной только что) привести к тому, что ваш движок JavaScript попытается запустить Data-fork вместо кода, который вы собираетесь запустить. Когда это произойдет, вы также получите

SyntaxError: Unexpected token ILLEGAL

потому что вилка данных вашего файла будет содержать символ Unicode U+200B. Удаление файла Data fork заставит ваш скрипт работать ваш фактический, предполагаемый код вместо двоичной вилки данных вашего кода.

.что угодно: эти файлы создаются на томах, которые изначально не поддерживают полные характеристики файлов HFS (например, Тома ufs, файлы Windows и т. д.). Когда файл Mac копируется на такой Том, его вилка данных хранится под обычным именем файла, а дополнительная информация HFS (вилка ресурсов, коды типа и создателя и т. д.) хранится во втором файле (в формате AppleDouble) с имя, которое начинается с «.«. (Эти файлы, конечно, невидимы для OS-X, но не для других ОС; это иногда может раздражать…)

  • Гордон Дэвиссон @ http://www.westwind.com/reference/OS-X/invisibles.html

У меня была такая же проблема, и это произошло, потому что я нажал клавишу enter при добавлении кода в текстовую строку.

потому что это была длинная строка текста, я хотел увидеть все это без необходимости прокручивать в моем текстовом редакторе, однако нажатие enter добавило невидимый символ в строку, которая была незаконной. Я использовал Sublime Text в качестве редактора.


Я изменил все области пространства на &nbsp, просто так, и это сработало без проблем.

val.заменить (» » , «Задоров»);

надеюсь, это кому-то поможет.


вот моя причина:

перед:

var path = "D:xxxutil.s"

, который u — это побег, я понял это с помощью сайт CodePenанализирует JS.

после:

var path = "D:xxxutil.s"

и исправлена ошибка


Когда встречается. Допустим, вы пишете цикл for на JavaScript и вспоминаете, что там нужна переменная цикла, условие и шаг цикла:

for var i = 1; i < 10; i++ {
<span style="font-weight: 400;">  // какой-то код</span>
<span style="font-weight: 400;">}</span>

После запуска в браузере цикл падает с ошибкой:

❌ Uncaught SyntaxError: Unexpected token ‘var’

Что значит. Unexpected token означает, что интерпретатор вашего языка встретил в коде что-то неожиданное. В нашем случае это интерпретатор JavaScript, который не ожидал увидеть в этом месте слово var, поэтому остановил работу.

Причина — скорее всего, вы пропустили что-то из синтаксиса: скобку, кавычку, точку с запятой, запятую, что-то подобное. Может быть, у вас была опечатка в служебном слове и язык его не распознал.

Что делать с ошибкой Uncaught SyntaxError: Unexpected token

Когда интерпретатор не может обработать скрипт и выдаёт ошибку, он обязательно показывает номер строки, где эта ошибка произошла (в нашем случае — в первой же строке):

Интерпретатор обязательно показывает номер строки, где произошла ошибка Uncaught SyntaxError: Unexpected token

Если мы нажмём на надпись VM21412:1, то браузер нам сразу покажет строку с ошибкой и подчеркнёт непонятное для себя место:

Строка с ошибкой Uncaught SyntaxError: Unexpected token

По этому фрагменту сразу видно, что браузеру не нравится слово var. Что делать теперь:

  • Проверьте, так ли пишется эта конструкция на вашем языке. В случае JavaScript тут не хватает скобок. Должно быть for (var i=1; i<10; i++) {}
  • Посмотрите на предыдущие команды. Если там не закрыта скобка или кавычка, интерпретатор может ругаться на код немного позднее.

Попробуйте сами

Каждый из этих фрагментов кода даст ошибку Uncaught SyntaxError: Unexpected token. Попробуйте это исправить.

if (a==b) then  {}
function nearby(number, today, oneday, threeday) {
  if (user_today == today + 1 || user_today == today - 1)
    (user_oneday == oneday + 1 || user_oneday == oneday - 1)
      && (user_threeday == threeday + 1 || user_threeday == threeday - 1)
  return true
  
  else
     return false
}
var a = prompt('Зимой и летом одним цветом');
if (a == 'ель'); {
  alert("верно");
} else {
  alert("неверно");
}
alert(end);

Понравилась статья? Поделить с друзьями:
  • Error line 0 could not add constraint or connections
  • Error line 0 cannot find procedure u3dtopovalid
  • Error limits ansys
  • Error limitcheck offending command string
  • Error limitcheck offending command show