Что такое JavaScript на самом деле?
JavaScript («JS» для краткости) — это полноценный динамический язык программирования, который применяется к HTML документу, и может обеспечить динамическую интерактивность на веб-сайтах. Его разработал Brendan Eich, сооснователь проекта Mozilla, Mozilla Foundation и Mozilla Corporation.
JavaScript невероятно универсален и дружелюбен к новичкам. Обладая большим опытом, вы сможете создавать игры, анимированную 2D и 3D графику, полномасштабные приложения с базами данных и многое другое!
JavaScript сам по себе довольно компактный, но очень гибкий. Разработчиками написано большое количество инструментов поверх основного языка JavaScript, которые разблокируют огромное количество дополнительных функций с очень небольшим усилием. К ним относятся:
- Программные интерфейсы приложения (API), встроенные в браузеры, обеспечивающие различные функциональные возможности, такие как динамическое создание HTML и установку CSS стилей, захват и манипуляция видеопотоком, работа с веб-камерой пользователя или генерация 3D графики и аудио сэмплов.
- Сторонние API позволяют разработчикам внедрять функциональность в свои сайты от других разработчиков, таких как Twitter или Facebook.
- Также вы можете применить к вашему HTML сторонние фреймворки и библиотеки, что позволит вам ускорить создание сайтов и приложений.
Поскольку эта статья должна быть только лёгким введением в JavaScript, мы не собираемся путать вас на этом этапе, подробно рассказывая о том, какая разница между основным языком JavaScript и различными инструментами, перечисленными выше. Вы можете подробно изучить все это позже, в нашей учебной области JavaScript и в остальной части MDN.
Ниже мы познакомим вас с некоторыми аспектами основного языка, и вы также будете играть с несколькими функциями API браузера. Веселитесь!
Создание приложения Windows Forms
Большинство примеров кода в этом пошаговом руководстве предназначено для использования в качестве обработчиков событий для элементов управления кнопок. В следующей таблице перечислены элементы управления, необходимые для образца приложения, и их имена в соответствии с примерами кода.
Control | Имя | Текстовое свойство (при необходимости) |
---|---|---|
Button | Шифрование файла | |
Button | Расшифровка файла | |
Button | Создание ключей | |
Button | Экспорт открытого ключа | |
Button | Импорт открытого ключа | |
Button | Получение закрытого ключа | |
Label | Ключ не задан | |
OpenFileDialog | ||
OpenFileDialog |
дважды щелкните кнопки в конструкторе Visual Studio, чтобы создать свои обработчики событий.
NordLocker
Вместе с сервисами NordVPN и NordPass, NordLocker является еще одним продуктом компании, который является впечатляющим, как и другие. Вы можете начать с 2ГБ бесплатного шифрования ваших файлов, таких как:
- Фото
- Видео
- Личные заметки
- ID и пароли
- Финансовые документы
- Любые секретные файлы
Большинство из них предназначены для сохранения конфиденциальности и, зашифровав их с помощью NordLocker, вы предотвращаете их использование многими способами. Вы также можете зашифровать свои файлы перед загрузкой на облачные хранилища чтобы никто не мог получить к ним доступ.
В этом решении используются Argon2, AES256, ECC (с XChaCha20, EdDSA и Poly1305), которые являются самыми передовыми шифрами и принципами. Вы можете быть уверены, что ваши файлы хранятся на самом высоком уровне безопасности.
Как указано выше, вы получаете 2ГБ шифрования файлов и круглосуточную поддержку бесплатно. Если вы хотите неограниченное шифрование, вы можете выбрать премиум-план всего за 1 доллар в месяц.
Асинхронные скрипты: defer/async
Когда браузер загружает и отображает веб-страницу, то она загружается постепенно. Это хорошо заметно при медленном подключении, когда часть страницы загрузилась, а остальная часть еще нет.
И вот если браузер встречает тег <script>, то он выполняет его, а уже потом идет дальнейшая загрузка страницы.
Вот в примере пока все зайчики не будут посчитаны – нижний абзац не будет показан:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> </head> <body> <p>Начинаем считать:</p> <script> alert( 'Первый зайчик!' ); alert( 'Второй зайчик!' ); alert( 'Третий зайчик!' ); </script> <p>Зайчики посчитаны!</p> </body> </html>
Такую загрузку называют синхронной, то есть последовательной браузер последовательно сначала выполнит скрипт, а потом уже загрузит остальную часть страницы.
И следует заметить, что если скрипт внешний, то пока он не выполнится остальная часть страницы не загрузится.
Вот как здесь в примере пока не загрузится и не выполнится скрипт script.js, содержимое <body> будет скрыто:
<html> <head> <script src="script.js"></script> </head> <body> Этот текст не будет показан, пока браузер не выполнит script.js. </body> </html>
Только вот надо ли вам, чтобы так все происходило, а что если в скрипте ошибки, тогда скорость загрузки веб-страницы замедлится или может вообще зависнуть.
Да можно конечно подключение скриптов перенести вниз страницы, но иногда это тоже не спасает ситуацию.
А вот решить такую проблему помогут атрибуты async или defer:
- Атрибут async
- Поддерживается всеми браузерами, кроме IE9-. Скрипт будет выполняться полностью асинхронно. Таким образом, при <script async src=»…»> браузер не останавливает обработку страницы, а идет дальше загружать страницу и параллельно выполняет скрипт.
- Атрибут defer
- Поддерживается всеми браузерами, включая самые старые IE. Сценарий выполняется асинхронно,но имеются 2 отличия от async.
Первое – браузер будет загружать скрипты по порядку, а в случае с async, кто первым загрузится тот и загрузится.
Вот в примере (с async) первым выполнится, тот скрипт который раньше загрузится:
<script src="one.js" async></script> <script src="second.js" async></script>
А в вот в коде (с defer) первым выполнится всегда one.js, а вот скрипт second.js, даже если загрузился раньше, будет его ждать.
<script src="one.js" defer></script> <script src="second.js" defer></script>
Поэтому атрибут defer следует использовать только в тех случаях, когда второй скрипт second.js будет зависит от первого first.js, например – использует модуль, описанный первым скриптом.
Ну и второе отличие – скрипт с defer выполнится, когда вся веб-страница будет обработана браузером.
Например, если документ достаточно большой…
<script src="async.js" async></script> <script src="defer.js" defer></script> Много много много букв
- …То скрипт async.js выполнится, как только загрузится – возможно, до того, как весь документ готов. А вот defer.js будет ждать готовности всего документа.
Это удобно если нужно работать с элементами веб-страницы.
async вместе с defer
Если вы одновременно укажете и async и defer в браузерах будет использован только async, а вот в браузере IE9- – defer (async не воспринимает).
Атрибуты async/defer – только для внешних скриптов
Атрибуты async/defer работают только если подключаются внешние скрипты, т.е. имеющие src.
При попытке назначить на <script>…</script>, будут проигнорированы.
Тот же пример с async:
<p>Эта информация теперь не будет ждать, пока будет загружен весь скрипт...</p> <script async src="https://js.cx/hell/ads1.js?speed=0"></script> <p>...Очень важная информация!</p>
При запуске вы можете увидить, что вся страница загрузилась сразу же, а вот alert из внешнего скрипта появится позже, когда загрузится скрипт.
Забегая вперёд
Для тех,кто знает, что теги <script> можно добавлять при помощи javascript, то эти скриптв будут вести себя так же, как и async.
А для сохранения порядка выполнения и добавить несколько скриптов, которые будут выполнятся один за другим, надо использовать свойство script.async = false.
Выглядит это будет примерно так:
function addScript(src){ var script = document.createElement('script'); script.src = src; script.async = false; // чтобы гарантировать порядок document.head.appendChild(script); } addScript('first.js'); // загружаться эти скрипты начнут сразу addScript('second.js'); // выполнятся, как только загрузятся addScript('third.js'); // но, гарантированно, в порядке 1 -> 2 -> 3
Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)
Используя данный драйвер, можно без единой строки кода, просто установив на ТСД мобильный клиент 1С, сразу начать подбирать товары в документах вашей учётной системы. А, адаптировав нужные формы под небольшой размер экрана ТСД, можно просто создать полноценное рабочее место для выполнения операций с помощью ТСД, не прибегая к стороннему софту. Если же на складе плохая связь (или её нет вовсе), то можно использовать возможности мобильного клиента в автономном режиме (потребуется доработка вашей конфигурации).
Драйвер также можно использовать и для Android приложения на мобильной платформе. В результате чего можно обойтись без ненужных полей ввода и клавиатуры «на пол-экрана».
3 стартмани
Почему сложно писать безопасный код на JS
Итак, вот 5 причин, почему сложно писать безопасный код на JS
Компилятор не поможет
JavaScript — интерпретируемый язык. А это значит, что компилятор не будет все время на что-нибудь жаловаться, отказываясь работать и подталкивая тебя поправить ошибки и оптимизировать код.
Динамическая суть JavaScript
JavaScript динамический, слаботипизированный и асинхронный. А это все признаки того, что попасть в беду легче легкого.
1. Языковые средства вроде eval и включения стороннего кода через script src позволяют исполнять строки прямо в рантайме. Как следствие — сложно дать «статические гарантии» того, что код будет вести себя определенным образом. Динамический анализ это тоже затрудняет (см. научную работу).
Использование eval
2. Слабая типизация приводит к тому, что применять устоявшиеся методы статического анализа непросто — по крайней мере в сравнении со статически типизированными языками (например, Java).
3. Асинхронные колбэки, вызовы которых JavaScript допускает через механизмы вроде setTimeout и XMLHttpRequest (тот самый знаменитый AJAX), по статистике прячут в себе больше всего коварных ошибок.
Замысловатые возможности JS
Чего только не притащили в JavaScript с годами! В частности, в нем есть прототипы, функции первого класса и замыкания. Они делают язык еще динамичнее, а написание безопасного кода — сложнее.
1. Прототипы. Смысл их в том, что программы пишутся в духе объектно ориентированного подхода, но без использования классов. При таком подходе объекты наследуют необходимые им свойства напрямую от других объектов (прототипов). При этом в JS прототипы могут быть переопределены прямо в рантайме. И если это переопределение случилось, то эффект сразу же распространяется на все объекты, которые наследуют свойства переопределяемого прототипа.
Как обрабатываются прототипы
Справедливости ради надо сказать, что в новых спецификациях ECMAScript классы тоже присутствуют.
2. Функции первого класса. У JS очень гибкая модель объектов и функций. Свойства объектов и их значения могут быть созданы, изменены или удалены прямо в рантайме, и ко всем есть доступ через функции первого класса.
3. Замыкания. Если объявить функцию внутри другой функции, то первая получает доступ к переменным и аргументам последней. Причем эти переменные продолжают существовать и остаются доступными внутренней функции — даже после того, как внешняя функция, в которой эти переменные определены, завершилась.
Из-за такой гибкости и динамичности JavaScript (см. пункты 1 и 3) определение набора всех доступных свойств объекта при статическом анализе — неразрешимая задача. Однако веб-разработчики повсеместно используют динамические особенности языка, а соответственно, пренебрегать ими при анализе кода нельзя. Иначе какая тут гарантия безопасности?
Тесное взаимодействие между JavaScript и DOM
Это нужно, чтобы обеспечить «бесшовное» обновление веб-страницы, прямо в рантайме. DOM, как известно, представляет собой стандартную объектную модель, нейтральную по отношению к платформам и языкам, которая предназначена для отрисовки документов HTML и XML. У DOM есть собственный API для работы с отображаемым документом: для динамического доступа, перемещения и обновления отображаемого документа (его содержимого, структуры и стиля). Изменения в DOM могут вноситься динамически, через JavaScript. И эти изменения сразу же отображаются в браузере.
Благодаря DOM загруженные в браузер веб-страницы можно обновлять поэтапно по ходу подгрузки данных с сервера. Однако у такого удобства есть и оборотная сторона: фрагменты кода, которые отвечают за динамическое взаимодействие между JS и DOM, особенно подвержены ошибкам.
Наиболее распространенные ошибки в веб-приложениях
Сложные событийные взаимодействия
JavaScript — это язык, управляемый событиями (event-driven). Он позволяет разработчикам регистрировать на узлах DOM так называемых «слушателей событий» — event listeners. И хотя большинство событий вызываются действиями пользователя, существуют и такие, которые могут быть инициированы и без этого, — например, события по времени и асинхронные вызовы. При этом каждое событие может отдаваться эхом по всему дереву DOM и активировать сразу несколько «слушателей». Иногда отследить все это — довольно нетривиальная задача.
Как обрабатываются события
По этим причинам код на JS может быть труден для понимания, анализа и тестирования. Облегчат жизнь веб-разработчику и помогут писать безопасный код специальные утилиты.
Чем открыть файл в формате JS
Файловое расширение JS хотя и является узкоспециализированным, однако может быть двух основных категорий:
файл JS (JavaScript File) представляет собой текстовый формат данных в программном коде JavaScript. Данный код активируется в процессе загрузки какой-либо интернет-страницы и реализует некоторые функции JS скриптов, например, открытие/закрытие окна браузера, проверка корректности заполнения полей формы, форматирование графических фрагментов изображений, генерация выпадающего меню.
Формат JS тесно взаимосвязан с HTML файлами посредством ссылки на блок HEAD.
JS формат (полн. JScript Executable Script) относится к категории исполнительных файлов, написанных с применением программного кода языка ECMAScript. Стандарт ECMA базируется на ряде широко известных технологий, самыми распространенными среди которых являются JavaScript (Netscape) и JScript (Microsoft). Впервые данные технологии были апробированы в интернет-браузере Navigator. Стандарт адаптирован для всех версий Navigator 2.0 и выше, а также может быть интегрирован во все браузеры от Microsoft, включая Internet Explorer.
Документ ECMA был разработан под эгидой международного технического комитета ISO/IEC JTC 1 “Методы и средства информационных технологий” и нашел свое отражение в виде ISO/IEC 16262:2011 “Информационные технологии. Языки программирования, их среды и системные интерфейсы программного обеспечения. Спецификация языка ECMAScript”.
Международный стандарт ISO/IEC не имеет окончательной версии и постоянно модернизируется, также, как и структура формата JS.
На сегодняшний день расширение JS уже имеет достаточно мощный механизм обработки данных, управления конструкциями и контроля над ошибками.
Программы для открытия JS файлов
Исходя из принадлежности к категории и области своего практического применения, JS формат может быть открыт и отформатирован с использованием следующих программных приложений:
В случае, JS формат представляет собой текстовый формат данных в программном коде JavaScript, в ОС Windows он может быть воспроизведен с использованием следующих программных продуктов:
Примечательно, что формат JS адаптирован и для работы на базе ОС Mac с использованием следующих утилит:
Когда JS файл относится к категории исполнительных файлов, написанных с применением программного кода языка ECMAScript, он не нуждается в дополнительном программном обеспечении и может быть воспроизведен самостоятельно (Windows-based script host (Wscript.exe)).
Если при открытии расширения JS возникает ошибка, причины могут заключаться в следующем:
- поврежден или инфицирован файл;
- файл не связан с реестром ОС (выбрано некорректное приложение для воспроизведения или не произведена инсталляция конкретного плагина);
- недостаточно ресурсов устройства или ОС;
- поврежденные или устаревшие драйвера.
Конвертация JS в другие форматы
Уникальная структура и область применения JS для каждого конкретного случая не предоставляют возможностей для конвертации данного формата в другие расширения. Попытки конвертации расширения в другой формат могут не только не дать никаких практических результатов, но и повредить исходный файл. В этой связи трансляция данного формата практически не практикуется.
Почему именно JS и в чем его достоинства?
JS формат не является распространенным расширением среди рядовых пользователей. Основные его потребители – это инженеры программисты, разрабатывающие плагины к веб-приложениям с применением оригинального кода языков ECMAScript и JavaScript.
Другие похожие форматы и расширения файлов
Проверяем ключ
Теперь, когда у нас есть сообщение и ключ, проверим, хватит ли длины ключа или нет. Если не хватит — выведем сообщение и сгенерируем новый ключ.
Обратите внимание на второй параметр в функции, которая возвращает случайное значение. В нашем примере мы взяли число 66535, потому что в первом регистре кодировки Unicode 66536 символов — от 0 до 66535, а JavaScript возвращает коды символов строки как раз в Unicode
Попробуйте поставить число поменьше, например 9999, и посмотрите, как меняются символы в ключе и в готовой шифровке.
Само генерирование ключа очень простое: мы берём случайное число, переводим его в строку функцией String.fromCharCode() и добавляем результат к строке с ключом.
Создание ваших ключей
Команда gpg была установлена во всех проверенных дистрибутивах Linux, включая Ubuntu, Fedora и Manjaro.
Вам не нужно использовать GPG с электронной почтой. Вы можете зашифровать файлы и сделать их доступными для загрузки или передать их получателю физически. Однако вам необходимо связать адрес электронной почты с генерируемыми вами ключами, поэтому выберите, какой адрес электронной почты вы собираетесь использовать.
Вот команда для генерации ваших ключей. Параметр –full-generate-key генерирует ваши ключи в интерактивном сеансе в окне вашего терминала. Вам также будет предложено ввести кодовую фразу. Убедитесь, что вы помните кодовую фразу. Три или четыре простых слова, соединенных знаками препинания, — это хорошо и надежная модель паролей и кодовых фраз.
gpg --full-generate-key
Вам будет предложено выбрать тип шифрования из меню. Если у вас нет веской причины не делать этого, введите 1 и нажмите Enter.
Вы должны выбрать битовую длину ключей шифрования. Нажмите Enter, чтобы принять значение по умолчанию.
Вам нужно указать, сколько должен длиться ключ. Если вы тестируете систему, введите короткую продолжительность, например 5 для пяти дней. Если вы собираетесь сохранить этот ключ, введите более длительный срок, например 1 год в течение одного года. Срок службы ключа составляет 12 месяцев, поэтому его нужно будет продлить через год. Подтвердите свой выбор буквой Y.
Вы должны ввести свое имя и адрес электронной почты. Вы можете добавить комментарий, если хотите.
Вам будет предложено ввести кодовую фразу. Кодовая фраза понадобится вам всякий раз, когда вы будете работать со своими ключами, поэтому убедитесь, что вы знаете, что это такое.
Нажмите кнопку ОК, когда вы ввели парольную фразу. Вы увидите это окно во время работы с gpg, поэтому убедитесь, что вы помните свой пароль.
Произойдет генерация ключа, и вы вернетесь в командную строку.
Атрибуты async и defer
– атрибут , который используется для того, чтобы браузер не осуществлял остановку чтения страницы при загрузке скрипта. Скрипт в этом случае будет загружаться асинхронно, а как только он загрузится, он тут же выполнится.
<script src="common.js" async></script>
– атрибут , который так же, как и атрибут «говорит» браузеру, что его загрузку нужно выполнять асинхронно. Но в отличие от он указывает на то, что этот скрипт необходимо выполнить только после полной загрузки страницы.
<script src="path_to/script.js" defer></script>
Второе отличие от заключается в том, что будет сохранена очерёдность выполнения скриптов.
<script src="path_to/1.js" defer></script> <script src="path_to/2.js" defer></script>
Т.е. скрипты вне зависимости от того, какой из них загрузиться быстрее всё равно будут выполнены браузером в порядке их подключения, т.е. сначала , а потом .
Если для одновременно указать атрибуты и , то будет использоваться только .
<script src="path_to/script.js" async defer></script>
Атрибуты и можно использовать только для скриптов, подключаемых на страницу с помощью атрибута .
Утилиты для статического анализа
Ранее утилиты для выявления проблемных участков кода представляли собой статические анализаторы. То есть, учитывая все динамические причуды JS, могли предоставить только ограниченную помощь. Однако и они бывают полезными в анализе. Вот несколько основных примеров.
WARI — статический анализатор, который исследует зависимости между функциями JS, стилями CSS, тегами HTML и изображениями. Смысл этой утилиты — находить при статическом анализе неиспользуемые ресурсы. Однако с динамикой WARI, конечно, не справится.
JSLint — утилита для анализа статического кода, которая сама написана на JavaScript. Она проверяет код на соответствие хорошим практикам.
Google Closure Compiler — JS-оптимизатор, который автоматически переписывает код с целью сделать его быстрее и компактнее. Заодно в трубу вылетают все комментарии и любые неиспользуемые участки кода.
WebScent (см. научную работу) — продвинутый статический анализатор. В работе он исходит из того, что клиентский JS-код (тот, который загружается в браузер) не хранится на стороне сервера в целом виде, а рассеян по серверному коду кусками. «Душок» в этих кусках не может быть легко обнаружен до тех пор, пока из них не будет сгенерирован цельный клиентский код. WebScent анализирует клиентский код с тем, чтобы найти проблемные места в серверном коде. При этом работа статического анализатора WebScent в основном сводится к распутыванию замесов HTML, CSS и JS — с целью обнаружить дублирующийся код и ошибки в синтаксисе HTML.
Тестирование приложения
После сборки приложения необходимо выполнить следующие сценарии тестирования.
Создание ключей, шифрование и расшифровка
Нажмите кнопку . Метка отображает имя ключа и показывает, что это полная пара ключей.
Нажмите кнопку
Обратите внимание, что при экспорте параметров открытого ключа текущий ключ не изменяется.
Нажмите кнопку и выберите файл.
Нажмите кнопку и выберите только что зашифрованный файл.
Изучите только что расшифрованный файл.
Закройте приложение и перезапустите его, чтобы протестировать извлечение сохраненных контейнеров ключей в следующем сценарии.
Шифрование при помощи открытого ключа
- Нажмите кнопку . Метка отображает имя ключа и показывает, что это только открытый ключ.
- Нажмите кнопку и выберите файл.
- Нажмите кнопку и выберите только что зашифрованный файл. Произойдет сбой, так как для расшифровки нужен закрытый ключ.
Этот сценарий показывает, как шифровать файлы для другого лица при наличии только открытого ключа. Обычно это лицо предоставляет вам только открытый ключ и утаивает закрытый ключ для расшифровки.
Расшифровка при помощи закрытого ключа
- Нажмите кнопку . Метка отображает имя ключа и показывает, имеется ли полная пара ключей.
- Нажмите кнопку и выберите только что зашифрованный файл. Эта операция будет успешной, так как имеется полная пара ключей для расшифровки.
JS – Сценарий JavaScript (JavaScript File)
В Windows: Adobe Dreamweaver CS6, Adobe ColdFusion Builder 2, Microsoft Visual Studio 2010, Jetbrains IntelliJ IDEA, ES-Computing EditPlus, Microsoft Notepad, Adobe Creative Suite, Adobe ExtendScript, NotePad++, любой текстовый редактор, любой вэб-браузер В Mac OS: Adobe Dreamweaver CS6, Adobe ColdFusion Builder 2, Apple Dashcode, Bare Bones BBEdit, MacroMates TextMate, любой текстовый редактор, любой вэб-браузер В Linux: любой текстовый редактор, любой вэб-браузер
Описание расширения JS
Популярность:
Расширение JS – это текстовый файл, содержащий код JavaScript, который используется во время загрузки веб-страницы. Примерами JS скриптов могут быть функции, которые открывают и закрываю окна, проверка полей формы, позволяющая изменять изображения, или создавать выпадающее меню.
На файлы JS ссылаются HTML файлы внутри секции HEAD, которые используют функции JavaScript.
MIME тип: application/x-javascript ,text/javascript, application/javascript
Другие программы, связанные с расширением JS
- Исполняемый файл JScriptJScript – это версия JavaScript от Microsoft. JScript основан на реализации стандарта ECMAScript. Синтаксис JScript во многом похож на язык JavaScript. Так же используется при создании вэб-страниц ASP. Относится к разделу Исполняемые файлы. Популярность:
- Скрипт JACOsubРасширение .JS связано с JACOsub, редактором для Amiga, разработанный Alex Matulich. Относится к разделу Скрипты, файлы с кодом. Популярность:
Развитие этого стандарта началась в ноябре 1996 года. Первое издание ECMA стандартна была принята Генеральной Ассамблеей ECMA в июне 1997 года.
ECMA Стандарт был представлен ISO/IEC JTC 1 для принятия в рамках ускоренной процедуры, и утвержден в качестве международного стандарта ISO/IEC 16262, в апреле 1998 года. ECMA Генеральная Ассамблея в июне 1998 года утвердил второе издание ECMA-262, чтобы держать в полном соответствии с ISO/IEC 16262. Изменения между первым и вторым изданием являются редакционный характер.
Настоящий документ определяет третье издание стандарта и включает в себя мощный механизм регулярных выражений, лучшая обработка строк, новые управляющие конструкции, try/catch обработка исключений, жесткое определение ошибок, форматирование для числового вывода и незначительные изменения в ожидании предстоящего средства интернационализации и будущий язык роста.
Работа над языком не закончена. Технический комитет работает на значительными улучшениями, в том числе механизмов для скриптов, которые будут созданы и используются в Интернете.
Очень часто используется в качестве основы для построения других скриптовых языков таких, как JavaScript, JScript и ActionScript.