пакет javascript, является зарезервированным ключевым словом - PullRequest
9 голосов
/ 20 декабря 2011

Я пытаюсь свернуть стороннюю библиотеку JavaScript с помощью Google Closure Compiler, но она выдает ошибку в строке ниже:

inBlock.package = package = name

Ошибка

ОШИБКА - Parseошибка.пропущенное имя после.Оператор **

name выше является локальной переменной внутри функции, а inBlock является входным аргументом.Нигде в функции не объявлено package, кроме этой строки ошибки.

Я думаю, это может быть связано с тем, что package является зарезервированным ключевым словом в JavaScript?Любая идея, что пакет в JavaScript и как это исправить?

Ответы [ 4 ]

14 голосов
/ 20 декабря 2011

Вы правы, package - зарезервированное слово в JavaScript (но только в строгом режиме, поэтому код работает в некоторых местах).

package зарезервировано на будущее, что означает, что оно ни для чего не используется, но его нельзя использовать для именования переменных. Однако (если вы действительно должны), вы можете использовать его для именования ключей в таких объектах:

inBlock['package'] = name;  // this is ok

Пока вы используете строку. Вы не можете сделать это:

inBlock.package = name;  // this is not ok

Я бы сказал, что вам лучше называть это чем-то другим.

2 голосов
/ 20 декабря 2011

«пакет» является зарезервированным словом в ecmascript 3. ecmascript 5 уменьшил набор зарезервированных слов, сделав его доступным для браузера, который его реализовал, и снова ввел его в ecmascript 5 в «строгом» режиме (который должен стать основой будущего emcascript редакции).

Ecmascript 5 также изменил ограничения, накладываемые на зарезервированные слова, в частности, вы можете использовать зарезервированные слова в качестве имен свойств (независимо от режима), но не имен переменных.

В результате, если вы переводите Closure Compiler в режим EcmaScript 5, вы можете использовать «inBlock.package», и он не будет жаловаться, но если вы используете, попробуйте использовать его в более старых версиях IE (8,7,6 I поверь) разобрать не получится. Большинство других браузеров не следуют этой части спецификации и не подвержены этим изменениям.

2 голосов
/ 20 декабря 2011

Согласно MDN , package относится к категории «зарезервировано для будущего». В зависимости от того, какой версией какого браузера вы пользуетесь, и работает ли ваш код в строгом режиме, вы можете или не сможете использовать эти слова в качестве идентификаторов. Другими словами, вы должны избегать их безопасности.

Вы можете безопасно использовать зарезервированные слова в качестве имен свойств, если используете этот синтаксис:

inBlock["package"] = something;

Но это не поможет вам с вашей переменной package. Вы можете переименовать его?

1 голос
/ 20 декабря 2011

package - ключевое слово (из Java), зарезервированное для возможного последующего использования в JavaScript. Решение? Назовите вашу переменную как-нибудь еще:)

Если вы не можете изменить имя inBlock.package, получите доступ к нему, используя вместо этого скобки:

inBlock['package']
...