| CARVIEW |
JavaScript
Материал из Википедии — свободной энциклопедии
| Класс языка: |
мультипарадигменный: объектно-ориентированное, обобщённое, функциональное, императивное, аспектно-ориентированное, событийно-ориентированное, прототипное программирование |
|---|---|
| Тип исполнения: |
интерпретация, компиляция в байт-код Java, JIT в машинные коды. |
| Появился в: |
1995 г. |
| Автор(ы): | |
| Последняя версия: |
1.8.1 / 2009 |
| Типизация данных: | |
| Основные реализации: |
SpiderMonkey, Rhino, KJS (JavaScript) (англ.), JavaScriptCore, V8 |
| Диалекты: | |
| Испытал влияние: | |
| Повлиял на: |
JavaScript — скриптовый язык, чаще всего использующийся при создании сценариев поведения браузера, встраиваемых в веб-страницы. Является одной из реализаций языка ECMAScript.
Название «JavaScript» является зарегистрированным товарным знаком компании Sun Microsystems, Inc.[1]
[править] История
Предпосылкой появления языка JavaScript стало желание дать разработчикам HTML-документов возможность динамически управлять всеми объектами, описываемыми в коде Web-страницы. Разработанный Бренданом Айхом из компании Netscape язык был включён в браузер Netscape Navigator начиная с версии 2.0B3 в декабре 1995 года. Первоначально язык назывался Mocha, затем он был переименован в LiveScript. На синтаксис оказали влияние языки Си и Java, и, поскольку технология Java была в то время очень модной, LiveScript переименовали в JavaScript, получив соответствующую лицензию у Sun. Реализация компании Microsoft получила название JScript. Internet Explorer поддерживает JScript, начиная с версии 3.0, выпущенной в августе 1996 года. Стандартизация языка ассоциацией ECMA инициирована компанией Netscape. Стандартизированная версия имеет название ECMAScript, описывается стандартом ECMA-262. Первая версия данного стандарта примерно соответствовала JavaScript 1.1.
[править] Популярность
| Этот раздел не завершён. Вы поможете проекту, исправив и дополнив его. |
[править] Возможности языка
JavaScript обладает рядом свойств объектно-ориентированного языка, но благодаря прототипированию поддержка объектов в нём отличается от традиционных ОО языков. Кроме того, JavaScript имеет ряд свойств, присущих функциональным языкам — функции как объекты первого уровня, объекты как списки, карринг (currying), анонимные функции, замыкания (closures) — что придаёт языку дополнительную гибкость.
JavaScript имеет C-подобный синтаксис, но по сравнению с языком С имеет следующие коренные отличия:
- объекты, с возможностью интроспекции и динамического изменения типа через механизм прототипов;
- функции как объекты первого класса;
- автоматическое приведение типов;
- автоматическая сборка мусора;
- анонимные функции.
[править] Семантика и синтаксис
Синтаксис языка JavaScript во многом напоминает синтаксис Си и Java, семантически же язык гораздо ближе к Self, Smalltalk или даже Лиспу[2][Спецификация 1].
В JavaScript:
- все идентификаторы регистрозависимы,
- в названиях переменных можно использовать буквы, подчёркивание, символ доллара, арабские цифры,
- названия переменных не могут начинаться с цифры,
- для оформления однострочных комментариев используются
//, многострочные и внутристрочные комментарии начинаются с/*и заканчиваются*/.
[править] Структура языка
Структурно JavaScript можно представить в виде объединения трёх чётко различимых друг от друга частей[3]:
- ядро (ECMAScript),
- объектная модель документа (Document Object Model или DOM),
- объектная модель браузера (Browser Object Model или BOM).
[править] Ядро
-
Основная статья: ECMAScript
ECMAScript не является браузерным языком и на самом деле в нём не определяются методы ввода и вывода информации[3]. Это скорее основа для построения скриптовых языков. Спецификация ECMAScript описывает типы данных, инструкции, ключевые и зарезервированные слова, операторы, объекты, регулярные выражения, не ограничивая авторов производных языков от расширения их новыми составляющими.
[править] Типы данных
В JavaScript поддерживаются пять примитивных типов данных:
- числовой (Number),
- строковый (String),
- логический (Boolean),
- нулевой (Null),
- неопределённый (Undefined)[Спецификация 2].
Числовой тип данных в JavaScript соответствует 64-битному формату чисел с плавающей запятой, определённому стандартом IEEE 754-2008 за исключением того, что различные значения Not-a-Number, определяемые в стандарте[4], представляются в данном языке единственным специальным значением NaN[Спецификация 3].
Нулевой и неопределённый типы данных Дэвидом Флэнаганом неформально причисляются к тривиальным типам, поскольку каждый из них определяет только одно значение.[5]
Также в языке имеется составной тип данных[5]:
- объектный (Object).
Помимо перечисленных шести типов данных в JavaScript имеется поддержка ещё трёх, используемых исключительно для хранения промежуточных результатов вычисляемых выражений[Спецификация 4]:
- ссылочный (Reference),
- списочный (List),
- заключительный (Completion).
[править] Инструкции
В JavaScript имеется четырнадцать различных видов инструкций, данные о которых представлены в таблице ниже:
| Название | Оригинальное название | Краткие сведения | Завершающая ;[Спецификация 6] |
|---|---|---|---|
| Блок | Block | {[<инструкции>]} | - |
| Объявление переменной | VariableStatement | var <список объявления переменных> | + |
| Пустая инструкция | EmptyStatement | ; | + |
| Выражение | ExpressionStatement | [строка до ∉ {{, function}] инструкция | + |
| Условие | IfStatement | if (<инструкция>) <выражение>[ else <выражение>] | - |
| Цикл | IterationStatement | do <выражение> while (<инструкция>) while (<инструкция>) <выражение> |
+/-[~ 1] |
| Продолжение | ContinueStatement | continue [<идентификатор>] | + |
| Прерывание | BreakStatement | break [<идентификатор>] | + |
| Возврат | ReturnStatement | return [<инструкция>] | + |
| Сочетание | WithStatement | with (<инструкция>) <выражение> | - |
| Выбор | SwitchStatement | switch (<инструкция>) case <инструкция>: [<выражения>][ case <инструкция>: [<выражения>] …] [default: [<выражения>]] | - |
| Метка | LabelledStatement | <идентификатор>: <выражение> | - |
| Генерация исключения | ThrowStatement | throw <инструкция> | + |
| Блок try | TryStatement | try <блок> catch (<идентификатор>) <блок> try <блок> finally <блок> try <блок> catch (<идентификатор>) <блок> finally <блок> |
- |
[править] Автодополнение строк точками с запятой
Несмотря на обязательность точки с запятой в случаях, отмеченных в четвёртой колонке, спецификация декларирует механизм автодополнения строк точками с запятой, приводящий к тому, что при наличии переноса строки инструкция до переноса может быть снабжена этим знаком[Спецификация 6], что является объектом критики[6].
Инструкции, меняющие смысл при использования перевода строки внутри[Спецификация 6]
- Унарный постфиксный ++
- Унарный постфиксный --
- Продолжение
- Прерывание
- Возврат
- Генерация исключения
Пример изменения смысла инструкции
return{ status: "complete" };
Здесь выделенная строка содержит допустимую языком инструкцию и, поскольку, далее следует перевод строки, срабатывает механизм автодополнения строк точками с запятой. Вместо того, чтобы в качестве своего значения функция, содержащая приведённый код, в качестве своего значения вернула объект с полем status, она вернёт undefined.
Помочь избежать трудноуловимых ошибок, возникающих из-за срабатывания механизма автодополнения строк точками с запятой, может учёт этой языковой особенности JavaScript при выработке стандарта оформления кода, а именно при выборе стиля отступов. В частности, широко распространённые сейчас стили Олмана и Уайтсмита, а также стиль Хорстмана и стиль GNU для кода JavaScript являются менее предпочтимыми, нежели стили K&R, 1TBS, BSD KNF или баннерный стиль.
Общепринято в стандартах кодирования прописывать обязательность проставления точек с запятой даже там, где синтаксически их можно опустить из-за механизма автодополнения строк точками с запятой[Стандарты кодирования 1][Стандарты кодирования 2][Стандарты кодирования 3][Стандарты кодирования 4].
[править] Блоки и область видимости
Ещё одной особенностью JavaScript по отношению к другим C-подобным языкам является то, что в данном языке блоки не образуют области видимости (англ.). Объявленные в блоке переменные распространяются на всю функцию, содержащей блок[7][8].
В данном участке кода имеет место повторное объявление переменной в выделенных строках:
-
function foo() {
-
var sum = 0; -
for (var i = 0; i < 42; i += 2) { -
var tmp = i + 2; -
sum += i * tmp; -
} -
for (var i = 1; i < 42; i += 2) { -
sum += i*i; -
} -
alert(tmp); -
return sum; -
} -
foo();
Кроме того, к переменной tmp, объявленной внутри первого из циклов (строка 5), в соответствии с синтаксисом языка вполне законно обратиться извне цикла (строка 10).
При раскомментировании выделенной строки на экран будет выводиться не number, а undefined:
var a = 42; function foo() { alert(typeof a); // var a = 10;} foo();
Из-за особенностей, связанных с областью видимости и блоками, в целях поддержания качества исходного кода рекомендуется объявлять переменные в начале функций[7][Стандарты кодирования 1][Стандарты кодирования 4].
[править] Объявление переменных
Синтаксис языка допускает явное и неявное объявление переменных. Явным образом переменную можно объявить с помощью ключевого слова var. В таком случае, переменная будет помещена в область видимости, соответствующую функции, в которой она объявляется. Ещё переменные, объявленные с помощью ключевого слова var называют долговременными, поскольку их нельзя удалить с помощью оператора delete[9]. В том случае если переменная объявляется вне функций, она становится глобальной[9]. Синтаксис языка допускает использование переменной без её предварительного объявления. В таком случае речь идёт о неявном объявлении переменной. Кроме того, формальные аргументы функций также могут быть использованы в качестве локальных переменных[10].
Фиксация в стандарте оформления кода необходимости обязательного объявления переменных до их использования[Стандарты кодирования 1][Стандарты кодирования 4] (либо фиксация необходимости использовать пространства имён для всех глобальных объектов[Стандарты кодирования 2]) позволяет избегать трудноуловимых ошибок, предотвращая опасность взаимодействия одинаково названных переменных в разных участках кода[10].
[править] Ключевые и зарезервированные слова
Следующие слова являются зарезервированными в языке и не могут быть использованы как идентификаторы[Спецификация 7]:
break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof
Следующие слова используются как ключевые слова в предложенных расширениях и поэтому являются зарезервированными для возможности адаптировать эти расширения[Спецификация 8]:
abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public
Наличие большого количества ключевых и зарезервированных слов, большинство из которых не используется в языке иногда подвергается критике[11].
[править] Операторы
В JavaScript имеются как операторы, использующие в качестве названий ключевые слова, так и операторы, использующие в качестве названий знаки препинания.
[править] Классификация операторов
По убыванию приоритета операторы JavaScript можно разбить в следующие группы:
.(обращение к свойству),[](индексация массива),()(вызов функции),new(создание нового объекта),++(инкремент),--(декремент),-(унарный минус),+(унарный плюс),~(поразрядное дополнение),!(логическое дополнение),delete(удаление свойства),typeof(определение примитивного типа данных),void(возврат неопределённого значения),*(умножение),/(деление),%(остаток от деления),+(сложение),-(вычитание),+(конкатенация строк),<<(сдвиг влево),>>(сдвиг вправо с расширением знакового разряда),>>>(сдвиг вправо с дополнением нулями),<(меньше),<=(меньше или равно),>(больше),>=(больше или равно),instanceof(проверка типа объекта),in(проверка наличия свойства),==(проверка на равенство),!=(проверка на неравенство), === (проверка на идентичность),!==(проверка на неидентичность),&(поразрядная конъюнкция),^(поразрядное сложение по модулю 2),|(поразрядная дизъюнкция),&&(конъюнкция),||(дизъюнкция),?:(тернарная условная операция),=(присваивание),*=,/=,+=,-=,<<=,>=,>>>=,&=,^=,|=(присваивание с операцией),,(множественное вычисление)[12].
Операторы ++, --, -, +, ~, !, delete, typeof, void, ?:, =, *=, /=, +=, -=, <<=, >=, >>>=, &=, ^=, |= правоассоциативны (то есть для них a op b op c эквивалентно a op b op c). Остальные операторы JavaScript левоассоциативны[13].
По арности операторы JavaScript делятся на следующие группы:
- унарные (
delete,void,typeof,++,--,-(унарный минус),+(унарный плюс),~,!,new)[Спецификация 9], - бинарные (
.,[],(),*,/,%,+(сложение),-(вычитание),+(конкатенация строк),<<,>>,>>>,<,<=,>,>=,instanceof,in,==,!=, ===,!==,&,^,|,&&,||,=,*=,/=,+=,-=,<<=,>=,>>>=,&=,^=,|=,,), - тернарные (
?:)[14], - операторы, не имеющие фиксированного количества операндов (
())[15].
По положению знака операции относительно операндов операторы JavaScript делятся на следующие группы:
- префиксные (например,
new,++(префиксный инкремент), - инфиксные (например,
+,-), - постфиксные (например,
++(постфиксный инкремент),--(постфиксный декремент).
Также операторы классифицируются по типу операндов[16] и по характеру осуществляемого действия.
[править] Особенности операторов JavaScript
В JavaScript нет оператора, позволяющего проверить, относится ли метод или атрибут непосредственно к объекту или является унаследованным. Такая проверка осуществляется с помощью метода hasOwnProperty(). В связи с тем, что данный метод не является оператором, он может быть переписан у объекта другим методом, либо даже атрибутом[17].
Оператор + является единственным арифметическим операторов в языке, который перегружен для строковых аргументов. Таким образом, если оба его операнда являются числами, он вычисляет их сумму, но если хотя бы один из операндов — строка, + действует как конкатенатор[18].
В отличии от языков, где void является типом данных, в JavaScript это оператор, возвращающий значение undefined[19].
Оператор == перед проверкой на равенство осуществляет преобразование типов, что, в конечном счёте, может привести к неочевидным результатам[20].
Пример результатов работы == (во всех перечисленных случаях значением оператора с теми же аргументами будет false):
alert("NaN" == NaN); //false alert(NaN != NaN); //true alert(true == 1); //true alert(true == 42); //false alert(null == 0); //false alert(0 == ""); //true alert("" == 0); //true alert("false" == false); //false alert(false == 0); //true alert(undefined == false); //false alert(null == false); //false alert(undefined == null); //true alert(" \t\r\n " == 0); //true
[править] Функции
| Этот раздел не завершён. Вы поможете проекту, исправив и дополнив его. |
[править] Замыкания
-
Основная статья: Замыкание (программирование)
| Этот раздел не завершён. Вы поможете проекту, исправив и дополнив его. |
[править] Объекты
[править] Реализация в языке
Объекты ECMAScript представляют собой неупорядоченные коллекции свойств, каждое из которых имеет один или более атрибутов, которые определяют как может быть использовано свойство — например, если в качестве значения атрибута ReadOnly установлена истина, то любая попытка выполняющегося ECMAScript-кода поменять значение этого свойства останется безрезультатной. Свойства представляют собой контейнеры, инкапсулирующие другие объекты, значения примитивных типов и методы.[Спецификация 10]
| Название | Описание |
|---|---|
| ReadOnly | Свойство является свойством только для чтения. Попытка поменять значение этого свойства, предпринятая в программе, останется безрезультатной. В некоторых случаях значение свойства с установленным атрибутом ReadOnly меняется в силу действий среды расширения языка, поэтому ReadOnly не следует понимать как неизменное |
| DontEnum | Свойство не перечисляется циклом for-in |
| DontDelete | Попытки удалить это свойство будут проигнорированы |
| Internal | Свойство является внутренним. Оно не имеет названия и к нему нельзя получить доступ с помощью аксессоров. Доступ к этим свойствам определяется реализацией языка. |
Объекты ECMAScript подразделяются на базовые (native) и объекты расширения (host). Под базовыми понимаются любые объекты, независимые от окружения, относящегося к расширению языка. Некоторые из базовых объектов являются встроенными (built-in): существующими с самого начала выполнения программы. Другие могут быть созданы, когда программа выполняется. Объекты расширения предоставляются расширением ECMAScript, а для JavaScript это значит, что они входят в объектную модель документа или в объектную модель браузера.[Спецификация 2]
| Название | Может использоваться как функция | Может использоваться как конструктор |
|---|---|---|
| Global | - | - |
| Object | + | + |
| Function | + | + |
| Array | + | + |
| String | + | + |
| Boolean | + | + |
| Number | + | + |
| Math | - | - |
| Date | + | + |
| RegExp | + | + |
| Error | + | + |
| EvalError | + | + |
| RangeError | + | + |
| ReferenceError | + | + |
| SyntaxError | + | + |
| TypeError | + | + |
| URIError | + | + |
[править] Синтаксис
Для задания объектов может использоваться объектная и литеральная формы. Объектная форма задания объекта имеет синтаксис, аналогичный Java, но, в отличии от него, скобки в JavaScript требуется использовать только при передаче аргументов в конструктор[21]. Синтаксически следующие записи эквивалентны:
var obj1 = new Object(); var obj2 = new Object; var obj3 = {};
Однако второй вариант использовать не рекомендуется[21]. Дуглас Крокфорд рекомендует избегать и первого варианта, отдавая предпочтение литеральной форме, по его мнению, относящейся к самым большим достоинствам языка[22].
Спецификация языка оперирует понятием свойства объекта, называя методом использующуюся в качестве свойства объекта функцию[Спецификация 2].
Каждый объект в языке имеет следующие свойства:
| Название | Краткое описание |
|---|---|
| constructor | Функция, использованная для создания объекта (в примерах выше это Object()) |
| hasOwnProperty(propertyName) | Показывает, существует ли данное свойство в объекте (не в его прототипе) |
| isPrototypeOf(object) | Определяет, является ли данный объект прототипом объекта-аргумента |
| propertyIsEnumerable(propertyName) | Показывает, является ли свойство с данным названием перечислимым в цикле for-in |
| toString() | Возвращает представление объекта в виде строки |
| valueOf() | Возвращает значение this. Если же объект является результатом вызова конструктора объекта расширения, значение valueOf() зависит от реализации[Спецификация 2]. Зачастую в качестве возвращаемого значения выступает значение примитивного типа, соответствующее объекту. Как правило, результат данного метода совпадает с результатом toString(). Объекты, созданные с помощью конструктора Date() — яркий пример, где результаты toString() и valueOf() не совпадает[21]. |
Доступ к свойствам объекта осуществляется использованием точечной и скобочной записи:
var obj = new Object(); alert(obj.constructor === obj["constructor"]); //true — использование точечной и скобочной записи для доступа к полю var foo = obj["toString"]); //использование скобочной записи для сохранения функции в переменную var result = obj["toString"](); //сохранение результата вызова функции в переменную alert(foo()); //вывод на экран результата вызова сохранённой функции alert(result); var boo = obj.toString; //аналогично с использованием точечной записи var res = obj.toString(); alert(boo()); alert(res);
Задание новых свойств может осуществляться динамически.
var country = new Object(); country.["name"] = "Russia"; //использование скобочной записи country.foundationYear = 862; //использование точечной записи var country2 = { "name": "Russia", "foundationYear": 862 }; // использование литеральной формы
[править] Регулярные выражения
-
Основная статья: Регулярные выражения
Синтаксис и функциональность регулярных выражений в JavaScript сформировались под влиянием Perl 5[Спецификация 13] и допускают два вида синтаксиса: литеральный и объектный.
var literalWay = /pattern/flags; var objectWay = new RegExp(pattern, flags);
В первом случае шаблон (pattern) и флаги (flags) указываются явно, не сопровождаясь дополнительными избыточными синтаксическими знаками: их разделителями служат слеши. Во втором случае шаблон и флаги должны представлять собой переменные, содержащие строковые значения, либо непосредственно строковые значения. Литеральная форма записи предпочтительнее тем, что не требует двойного[~ 2] экранирования метасимволов регулярных выражений, в отличии от объектной формы[23].
В качестве флагов в JavaScript могут использоваться следующие символы:
| Флаг | Описание |
|---|---|
g |
глобальный режим: шаблон применяется ко всем соответствиям в строке, работа регулярного выражения не останавливается после первого найденного соответствия шаблону |
i |
игнорирование регистра: при поиске соответствий регистр символов шаблона и строки игнорируются |
m |
многострочный режим: строка, содержащая символы перевода строки, трактуется как несколько строк, разделённых символами перевода строки; работа регулярного выражения осуществляется во всех строках |
Каждое регулярное выражение представляет собой объект со следующими полями:
| Поле | Тип | Описание |
|---|---|---|
global |
логический | показывает, установлен ли флаг g |
ignoreCase |
логический | показывает, установлен ли флаг i |
multiline |
логический | показывает, установлен ли флаг m |
lastIndex |
числовой | соответствует номеру позиции в строке, в которой обнаружилось совпадение с шаблоном в результате предыдущего применения регулярного выражения или 0, если регулярное выражение ранее не применялось |
source |
строковый | строка, соответствующая шаблону регулярного выражения |
Кроме того, для регулярных выражений определены следующие методы:
| Поле | Тип возвращаемого значения | Описание |
|---|---|---|
exec(handledString) |
объектный (массив) или null |
формирует массив подстрок, соответствующих заданному шаблону с учётом выставленных флагов. null, если никакая подстрока не соответствует шаблону |
test(handledString) |
логический | true, если нашлась строка, соответствующая шаблону и false в противном случае |
[править] Особенности наследования в JavaScript
| Этот раздел не завершён. Вы поможете проекту, исправив и дополнив его. |
[править] Эмуляция классов
В языке нет классов, однако их можно эмулировать за счёт использования конструкторов. Пример эмуляции класса в JavaScript:
function MyClass() { this.myValue1 = 1; this.myValue2 = 2; } MyClass.prototype.myMethod = function() { return this.myValue1 * this.myValue2; } var mc = new MyClass(); mc.myValue1 = mc.myValue2 * 2; var i = mc.myMethod();
[править] Объектная модель документа
-
Основная статья: DOM
| Этот раздел не завершён. Вы поможете проекту, исправив и дополнив его. |
[править] Объектная модель браузера
| Этот раздел не завершён. Вы поможете проекту, исправив и дополнив его. |
[править] Область применения
JavaScript в данный момент полностью занимает нишу браузерных языков.
JavaScript также находит применение в качестве скриптового языка доступа к объектам приложений. Платформа Mozilla (XUL/Gecko) использует JavaScript. Среди сторонних продуктов, например, Java, начиная с версии 6, содержит встроенный интерпретатор JavaScript на базе Rhino. Сценарии JavaScript поддерживаются в таких приложениях Adobe, как Adobe Photoshop, Adobe Dreamweaver, Adobe Illustrator или Adobe InDesign.
JavaScript используется и для написания прикладного ПО. Одним из ярких примеров является Mozilla Firefox, 57 % исходного кода которого написано на JavaScript (для сравнения, следующим языком программирования по объёму кодовой базы Firefox является C++, доля которого составляет 17 %).[24]
[править] Использование на веб-страницах
[править] Расположение внутри страницы
JavaScript-код включается в код страницы и исполняется интерпретатором, встроенным в браузер. JavaScript заключается в теги <script></script>.
Скрипт, выводящий модальное окно с классической надписью «Hello, World!» внутри браузера:
<script type="text/javascript"> alert('Hello, World!'); </script>
[править] Расположение внутри тега
Следуя концепции интеграции JavaScript в существующие системы, браузеры поддерживают включение скрипта, например, в значение атрибута события:
<a href="delete.php" onclick="return confirm('Вы уверены?');">Удалить</a>
[править] Отделение от разметки
В приведённом примере при нажатии на ссылку функция confirm('Вы уверены?'); вызывает модальное окно с надписью «Вы уверены?», а return false; блокирует переход по ссылке. Разумеется, этот код будет работать только если в браузере есть и включена поддержка JavaScript, иначе переход по ссылке произойдет без предупреждения.
Использование кода JavaScript в контексте разметки страницы в рамках ненавязчивого JavaScript расценивается как плохая практика. Аналогом (при условии снабжения ссылки идентификатором alertLink)
<a href="delete.php" id="alertLink">Удалить</a>
приведённого примера может выступать, например, следующий фрагмент JavaScript:
window.onload = function() { var linkWithAlert = document.getElementById("alertLink"); linkWithAlert.onclick = function() { return confirm('Вы уверены?'); }; };
[править] Вынесение в отдельный файл
Есть и третья возможность подключения JavaScript — написать скрипт в отдельном файле, а потом подключить его с помощью конструкции
<script type="text/javascript" src="https://Путь_к_файлу_со_скриптом"></script>
[править] Атрибуты тега script
Тег script, широко используемый для подключения к странице JavaScript, имеет несколько атрибутов.
— В запросе комментариев RFC-4329, определяющем[26] MIME-тип, соответствующий JavaScript, указано:[27]:
Известно, что использование «text» в качестве типа верхнего уровня данного типа содержимого проблематично. Поэтому данный документ определяет
text/javascriptandtext/ecmascript, отмечая их «устаревшими». Использование экспериментальных и незарегистрированных медиа-типов, таких как перечисленные в части выше, не приветствуется.Медиа-типы
application/javascript,application/ecmascript,которые также определяются в этом документе, предназначены для практического использования, им следует отдавать предпочтение.
Оригинальный текст (англ.)Use of the "text" top-level type for this kind of content is known to be problematic. This document thus defines
text/javascriptandtext/ecmascriptbut marks them as "obsolete". Use of experimental and unregistered media types, as listed in part above, is discouraged.The media types,
application/javascriptapplication/ecmascriptwhich are also defined in this document, are intended for common use and should be used instead.
Однако, согласно спецификации HTML 4.01 в качестве значения type должно быть[25] указано устаревшее[27][28] "text/javascript". Так как JavaScript является языком программирования по умолчанию во всех браузерах, начиная с Netscape 2[29], Дуглас Крокфорд придерживается мнения о нецелесообразности использования атрибута type, рекомендуя указывать его в XHTML, так как хотя он, по мнению Крокфорда и не нужен, но обязателен и не указывать в HTML[30].
- необязательный атрибут
src, принимающий в качестве значения адрес к файлу со скриптом. - необязательный атрибут
charset, используемый вместе сsrcдля указания используемой кодировки внешнего файла. - необязательный атрибут
defer, используемый для того, чтобы показать, что скрипт не генерирует никакого содержимого (что означает, в частности, то, что в этом скрипте отсутствует вызовdocument.write()).
При этом атрибут language (language="JavaScript"), несмотря на его активное использование (в 2008 году этот атрибут был наиболее часто используемым у тега <script>[31]), относится к не рекомендуемым (deprecated), отсутствует в DTD, поэтому считается некорректным[32].
[править] Букмарклеты
-
Основная статья: Букмарклет
JavaScript используется для создания небольших программ, размещаемых в закладки браузера. При этом используются URL-адреса со спецификатором javascript:[33].
[править] AJAX
-
Основные статьи: AJAX, Comet (программирование)
JavaScript используется в AJAX, одной из популярных технологий, позволяющей сделать страницы более динамическими и обеспечить новые возможности.
[править] Версии
| JavaScript | JScript | ECMAScript |
|---|---|---|
| 1.0 (Netscape 2.0, март 1996) | 1.0 (ранние версии IE 3.0, август 1996) | Оригинальная версия языка JavaScript. Имела много ошибок и на данный момент безусловно устарела. |
| 1.1 (Netscape 3.0, август 1996) | 2.0 (поздние версии IE 3.0, январь 1997) | В данной версии был реализован объект Array и устранены наиболее серьезные ошибки. |
| 1.2 (Netscape 4.0, июнь 1997) | Реализован переключатель switch, регулярные выражения, а также ряд других особенностей. Практически приведён в соответствии со спецификацией ECMA v1. | |
| 1.3 (Netscape 4.5, октябрь 1998) | 3.0 (IE 4.0, октябрь 1997) | Редакция 1 (июнь 1997) / редакция 2 (июнь 1998). Исправлена несовместимость по JavaScript 1.2. Совместим с ECMA v1. |
| 1.4 (только Netscape Server) | 4.0 (Visual Studio 6, нет версии IE) | Применяется только в Netscape-серверных продуктах. |
| 5.0 (IE 5.0, март 1999) | ||
| 5.1 (IE 5.01) | ||
| 1.5 (Netscape 6.0, ноябрь 2000; также поздние версии Netscape и Mozilla) |
5.5 (IE 5.5, июль 2000) | Редакция 3 (декабрь 1999).Реализовано исключение погрузочно-разгрузочных операций. Совместим с ECMA v3. |
| 5.6 (IE 6.0, октябрь 2001) | ||
| 1.6 (Gecko 1.8, Firefox 1.5, ноябрь 2005) | Редакция 3 с некоторыми совместимыми улучшениями: E4X, дополнения к Array (например, Array.prototype.forEach), упрощения для Array и String [34] |
|
| 1.7 (Gecko 1.8.1, Firefox 2.0, осень 2006), расширение JavaScript 1.6 | Редакция 3, с добавлением всех улучшений из JavaScript 1.6, генераторов и списочных выражений (list comprehensions, [a*a for (a in iter)]) из Python, блоковых областей с использованием let и деструктурирующего присваивания (var [a, b] = [1, 2]) [35] |
|
| JScript .NET (ASP.NET; нет версии IE) | (Считается, что JScript .NET разработан при участии других членов ECMA) | |
| 2.0 | Редакция 4 (разработка не закончена[36], название зарезервировано ECMA, но не было использовано для публикации[Спецификация 14]) | |
| Редакция 5 (ранее известная под названием ECMAScript 3.1.[36] Финальная версия планируется к принятию до конца 2009 года.[36]) |
[править] Библиотеки JavaScript
-
Основная статья: Библиотека JavaScript
Для обеспечения кросс-браузерности и высокого уровня абстракции при разработке веб-приложений используются библиотеки JavaScript. Они представляют собой набор многократно используемых объектов и функций.
Среди известных JavaScript библиотек можно отметить Adobe life, Dojo Toolkit, Extjs, jQuery, Mootools, Prototype, Qooxdoo.
[править] Отладка
В JavaScript доступ к отладчикам становится бесценным при разработке крупных нетривиальных программ, потому что в процессе разработки возникают разногласия с разными браузерами (в частности с DOM). Полезно иметь доступ к отладчику для каждого из браузеров, в которых будет работать веб-приложение. В настоящее время, Internet Explorer, Firefox, Safari, Google Chrome, а также Opera имеют отладчики сценариев.
Internet Explorer имеет три отладчика: Microsoft Visual Studio является самым полным из трёх, следом за ним следует Microsoft Script Editor (компонент Microsoft Office), и, наконец, свободный Microsoft Script Debugger, который гораздо более простой, чем два других. Бесплатный Microsoft Visual Web Developer Express предоставляет ограниченную версию с отладочной функцией JavaScript в Microsoft Visual Studio. В восьмой версии в IE вместе с инструментами для разработчиков появился встроенный отладчик.
В Opera также имеется собственный отладчик — Opera Dragonfly.
Разработку веб-приложений в Firefox можно отлаживать при помощи плагина Firebug или отладчика Venkman.
WebKit Web Inspector включает в себя отладчик JavaScript, в Safari от Apple.
[править] Средства тестирования
FireUnit — плагин, написанный для аддона FireBug. FireUnit написан Джоном Резигом и Яном Одварко. Тестирование происходит на основе строковых переменных, поэтому тестирование с использованием данных внешних источников может оказаться нетривиальной задачей.
YUI test — является частью YUI.
JSUnit — порт JUnit для языка JavaScript. Из минусов можно отметить необходимость установки виртуальной машины Java (если необходимо использовать JsUnit Server, что в большинстве случаев не требуется).
[править] Связь с другими языками
[править] Взаимное влияние
Стандартизация JavaScript потребовала уйти от проблем с торговыми марками, поэтому стандарт ECMA 262 называет язык ECMAScript, три редакции которого были опубликованы с начала работы над ним в ноябре 1996 года.
Objective-J — это строгое компактное надмножество JavaScript, в котором к JavaScript добавлено традиционное наследование, динамической диспетчеризацией в стиле Smalltalk/Objective-C и псевдостатичная типизация.
VBScript от Microsoft, подобно JavaScript, может выполняться на стороне клиента в веб-страницах. VBScript имеет синтаксис, производный от Visual Basic и поддерживается только в Internet Explorer.
JSON, или объектная нотация JavaScript, это формат обмена данными общего назначения, определённый как подмножество JavaScript.
Scheme также является родственным JavaScript языком, поскольку оба представляют богатые возможности функционального программирования: JavaScript является динамическим языком, поддерживает гибкие массивы, может легко симулировать s-выражения, имеет поддержку лямбда-выражений.[37]
[править] JavaScript и Java
Общим заблуждением является то, что JavaScript аналогичен или тесно связан с Java, это не так. Оба языка имеют C-подобный синтаксис, являются объектно-ориентированными и как правило широко используются в клиентских веб-приложениях, на этом их сходство заканчивается:
- Java использует парадигму ООП из C++; JavaScript использует прототипный подход (где нет классов, а объект — просто хеш);
- Java имеет статическую типизацию; JavaScript имеет динамическую типизацию (значение переменной может содержать объекты любого типа и даже функции);
- Java загружается из скомпилированного байт-кода; JavaScript интерпретируется напрямую из файла (но часто с незаметной JIT-компиляцией).
[править] Реализация
На JavaScript реализованы интерпретаторы ряда языков программирования, что позволяет использовать для них как среду выполнения веб-браузер. Им можно найти применение, например, в образовательных целях[38].
Quite BASIC представляет собой бесплатную проприетарную реализацию языка программирования Basic[39].
HotRuby — свободная реализация виртуальной машины Руби на JavaScript и Flash. Позволяет выполнять байткод, полученных в результате компиляции YARV. Реализует большую часть грамматики Руби. Пока не реализован механизм исключений и большая часть встроенных функций и классов[40]. При помощи HotRuby на веб-страницах можно использовать руби-скрипты. Для этого руби-код следует поместить в блок:
<script type="text/ruby"> … </script>
HotRuby выделит его, пошлёт на компиляцию удалённому скрипту и затем отобразит результаты работы на странице[41]. Данная реализация позволяет осуществлять доступ из Руби к объектам JavaScript[42].
Также существуют свободная бутстрап (англ.)-реализация интерпретатора JavaScript s-mr[43], реализация на JavaScript PostScript и PDF WPS, использующая HTML 5 Canvas[44], реализация ассемблера для восьмиразрядного микропроцессора MOS Technology 6502[45], реализация Objective-J Cappuccino[46], реализация Haskell ycr2js[47], реализации Prolog Monash Toy Prolog[48] и ioctl[49], а также реализация языка программирования Cat (англ.)[50].
[править] Взаимодействие
В некоторых языках программирования существуют средства поддержки взаимодействия с JavaScript-кодом.
- Для PHP имеется пакет HTML_Javascript, предоставляющий интерфейс создания простых JavaScript-программ[51].
- Соответствующий пакет для TCL называется ::javascript. Он предоставляет команды генерации кода HTML и JavaScript[52].
- Пакет для Perl Data::JavaScript позволяет переносить структуры данных Perl в JavaScript-код[53].
[править] Поддержка браузерами
На сегодняшний день поддержку JavaScript обеспечивают современные версии всех наиболее часто используемых браузеров. Тем не менее, иногда пользователи сталкиваются с сообщениями, что поддержку JavaScript следует включить для работы с тем или иным веб-приложением. Сделать это можно с помощью соответствующего пункта меню.
| Этот раздел не завершён. Вы поможете проекту, исправив и дополнив его. |
[править] См. также
[править] Примечания
- ↑ Sun Microsystems. Sun Trademarks (англ.). Официальный сайт Sun Microsystems. — Перечень торговых марок, зарегистрированных Sun Microsystems. Проверено 24 сентября 2009.
- ↑ Mikkonen T., Taivalsaari A. Using JavaScript as a Real Programming Language (англ.). — USA: Sun Microsystems Laboratories, 2007.
- ↑ 1 2 Zakas N. 1. What is JavaScript? // Professional JavaScript for Web Developers. — 2nd ed. — USA, Canada: Wiley Publishing, Inc., 2009. — P. 3. — ISBN 978-0-470-22780-0
- ↑ Aiken A., Applegate M., Bailey D. and others. 6.2. Operations with NaNs // IEEE Standard for Floating-Point Arithmetic / Chair Zuras D., Editor Cowlishaw M.. — USA: 2008. — P. 34. — ISBN 978-0-7381-5753-5
- ↑ 1 2 Дэвид Флэнаган. 3. Типы данных и значения // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 39. — ISBN 5-93286-103-7
- ↑ Crockford D. A.3. Semicolon Insertion // JavaScript: The Good Parts. — 2008. — 170 p.
- ↑ 1 2 Crockford D. A.2. Scope // JavaScript: The Good Parts. — 2008. — 170 p.
- ↑ Дэвид Флэнаган. 4.3.1. Отсутствие блочной области видимости // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 70 — 71. — ISBN 5-93286-103-7
- ↑ 1 2 Дэвид Флэнаган. 4.2. Объявление переменных // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 68. — ISBN 5-93286-103-7
- ↑ 1 2 Koch Peter-Paul Chapter 5. Core. Section D. Variables // ppk on JavaScript / Editor: Wendy Sharp. — 1st ed. — New Riders Press, 2006. — 528 p. — ISBN 978-0-321-42330-6
- ↑ Crockford D. A.4. Reserved Words // JavaScript: The Good Parts. — 2008. — 170 p.
- ↑ Дэвид Флэнаган. 5.2. Обзор операторов // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 78 — 79. — ISBN 5-93286-103-7
- ↑ Дэвид Флэнаган. 5.2.4 Ассоциативность операторов // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 81. — ISBN 5-93286-103-7
- ↑ Дэвид Флэнаган. 5.2.1 Количество операндов // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 79. — ISBN 5-93286-103-7
- ↑ Дэвид Флэнаган. 5.10.8 Оператор вызова функции // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 98. — ISBN 5-93286-103-7
- ↑ Дэвид Флэнаган. 5.2.2 Тип операндов // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 80. — ISBN 5-93286-103-7
- ↑ Crockford D. A.13. hasOwnProperty // JavaScript: The Good Parts. — 2008. — 170 p.
- ↑ Crockford D. A.8. + // JavaScript: The Good Parts. — 2008. — 170 p.
- ↑ Crockford D. B.12. void // JavaScript: The Good Parts. — 2008. — 170 p.
- ↑ Crockford D. B.1. == // JavaScript: The Good Parts. — 2008. — 170 p.
- ↑ 1 2 3 4 Zakas N. The Object Type // Professional JavaScript for Web Developers. — 2nd ed. — USA, Canada: Wiley Publishing, Inc., 2009. — P. 40 — 41. — ISBN 978-0-470-22780-0
- ↑ Crockford D. JSON // JavaScript: The Good Parts. — 2008. — P. 136.
- ↑ 1 2 3 4 Zakas N. The RegExp Type // Professional JavaScript for Web Developers. — 2nd ed. — USA, Canada: Wiley Publishing, Inc., 2009. — P. 115 — 122. — ISBN 978-0-470-22780-0
- ↑ Ohloh Mozilla Firefox Code Analysis (англ.). — Анализ исходного кода Mozilla Firefox. Проверено 25 сентября 2009.
- ↑ 1 2 W3C 18.2.1 Элемент SCRIPT (англ.). Спецификация HTML 4.01 (24 декабря 1999 г.). — Описание элемента Script. Проверено 25 сентября 2009.
- ↑ Администрация адресного пространства Интернет Application Media Types (англ.). — Соответствие типов содержимого MIME-типам. Проверено 28 сентября 2009.
- ↑ 1 2 Hoehrmann B. RFC4329 (англ.) (txt). Рабочая группа сетевых технологий специальной комиссии интернет-разработок (Апрель 2006). — Текст запроса комментариев RFC4329. Проверено 28 сентября 2009.
- ↑ Zakas N. 2. JavaScript in HTML // Professional JavaScript for Web Developers. — 2nd ed. — USA, Canada: Wiley Publishing, Inc., 2009. — P. 13. — ISBN 978-0-470-22780-0
- ↑ W3C. Client-side Scripting and HTML (англ.). — Использование клиентских скриптов с HTML. Проверено 8 октября 2009.
- ↑ Crockford D. JavaScript and HTML Script Tags (англ.). — Использование тега script для подключения JavaScript. Проверено 8 октября 2009.
- ↑ Wilson B. MAMA: HEAD structure (англ.). Opera Developer Community. Opera Software ASA (14 ноября 2008). — Статистика используемых элементов в секции head веб-документов. Проверено 14 октября 2009.
- ↑ W3C. Перечень атрибутов (англ.). Спецификация HTML 4.01 (24 декабря 1999 г.). — Сводная таблица атрибутов HTML. Проверено 25 сентября 2009.
- ↑ Дэвид Флэнаган. 13.4.1. Букмарклеты // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 267. — ISBN 5-93286-103-7
- ↑ New in JavaScript 1.6 (англ.). Mozilla Developer Center. — Новое в JavaScript версии 1.6. Проверено 5 октября 2009.
- ↑ New in JavaScript 1.7 (англ.). Mozilla Developer Center. — Новое в JavaScript версии 1.7. Проверено 5 октября 2009.
- ↑ 1 2 3 ECMA. Final draft of ECMA-262 – the ECMAScript language standard – has been published (англ.). — Анонс окончательного варианта проекта пятой редакции ECMA-262. Проверено 25 сентября 2009.
- ↑ Крокфорд Д. Малыш-программист на JavaScript (англ.). — Статья, раскрывающая связь между JavaScript и Scheme. Проверено 28 сентября 2009.
- ↑ Толксдорф Р. Языки программирования для JavaScript (англ.). is-research. — Подборка реализаций языков программирования на JavaScript.. Проверено 12 октября 2009.
- ↑ Strom N. About Quite BASIC (англ.). Проверено 12 октября 2009.
- ↑ hotruby. Ruby on JavaScript and Flash (англ.). Проверено 12 октября 2009.
- ↑ Cooper P. HotRuby: A JavaScript & Flash Virtual Machine That Runs Ruby (англ.). Rubi Inside. Проверено 12 октября 2009.
- ↑ Шустер В. HotRuby - Ruby 1.9/YARV opcode interpreter in Javascript (англ.). infoQ. — Описание HotRuby.. Проверено 12 октября 2009.
- ↑ Formiga A. s-mr. Self-made Rhino (англ.). Проверено 12 октября 2009.
- ↑ Hlavaty T. WPS: PostScript for the Web (англ.). Проверено 12 октября 2009.
- ↑ 6502asm.com - 6502 compatible assembler and emulator in javascript (англ.). Проверено 12 октября 2009.
- ↑ Cappuccino Web Framework - Build Desktop Class Applications in Objective-J and JavaScript (англ.). Проверено 12 октября 2009.
- ↑ Yhc/Javascript/Brief overview (англ.). Проверено 12 октября 2009.
- ↑ Monash Toy Prolog (англ.). Проверено 12 октября 2009.
- ↑ ioctl. Prolog in JavaScript (англ.). Проверено 12 октября 2009.
- ↑ Online Cat Interpreter (англ.). Проверено 12 октября 2009.
- ↑ Package Information: HTML_Javascript (англ.). PEAR - PHP Extension and Application Repository. Проверено 12 октября 2009.
- ↑ TCLLIB — Tcl Standard Library: javascript (англ.). Проверено 12 октября 2009.
- ↑ Data::JavaScript (англ.). Comprehensive Perl Archive Network. Проверено 12 октября 2009.
[править] Спецификации ECMAScript
- ↑ TC39. 4. Overview // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 1.
- ↑ 1 2 3 4 TC39. 4.3. Definitions // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 4.
- ↑ TC39. 8.5. The Number Type // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 24.
- ↑ TC39. 8. Types // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 24.
- ↑ TC39. 12. Statements // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 61 — 71.
- ↑ 1 2 3 TC39. 7.9. Automatic Semicolon Insertion // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 21 — 24.
- ↑ TC39. 7.5.2. Keywords // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 13 — 14.
- ↑ TC39. 7.5.3. Future Reserved Words // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 15.
- ↑ TC39. 11.4. Unary Operators // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 46 — 48.
- ↑ TC39. 4.2. Language Overview // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 2.
- ↑ TC39. 8.6.1. Property attributes // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 25, 26.
- ↑ TC39. 15. Native ECMAScript Objects // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 76 — 148.
- ↑ 1 2 3 4 TC39. 15.10. RegExp (Regular Expression) Objects // ECMAScript Language Specification. — 3rd ed. — 1999. — P. 129 — 145.
- ↑ TC39. Introduction // ECMAScript Language Specification. Final Draft. — 5th ed. — 2009.
[править] Стандарты оформления кода JavaScript
- ↑ 1 2 3 Crockford D. Code Conventions for the JavaScript Programming Language (англ.). Douglas Crockford's JavaScript. — Стандарт оформления кода JavaScript Дугласа Крокфорда. Проверено 5 октября 2009.
- ↑ 1 2 NextApp, Inc. JavaScript Code Conventions (англ.). Echo Web Framework. — Стандарт оформления кода JavaScript, принятый для Echo Web Framework. Проверено 5 октября 2009.
- ↑ Amaram Rahul Javascript Naming Conventions, Coding Guidelines and Best Practices (англ.). Echo Web Framework. — Стандарт оформления кода JavaScript Рауля Амарама. Проверено 5 октября 2009.
- ↑ 1 2 3 Komenda Klaus JavaScript Coding Guidelines and Standards (англ.). Сайт австрийского веб-разработчика Клауса Коменда. — Стандарт оформления кода JavaScript Клауса Коменда. Проверено 5 октября 2009.
[править] Комментарии
- ↑ Только в отношении do-while
- ↑ Одним обратным слешем экранируются метасимволы строк (например,
\t). Для экранирования метасимволов регулярных выражений используется двойной обратный слеш (например,\\s)
[править] Ссылки
[править] Сайты
[править] Документация
- Кантор И. Центральный JavaScript-ресурс (рус.)
- Крокфорд Д. JavaScript Дугласа Крокфорда (англ.)
- Mozilla. Документация по JavaScript (рус.)
[править] Форумы
- Форум на JavaScript.ru (рус.)
- Форум на Винграде (рус.)
[править] Справочники
- Поддержка JavaScript браузерами (англ.)
- Поддержка ECMAScript браузерами (англ.)
- Поддержка DOM браузерами (англ.)
[править] Блоги известных авторов книг по JavaScript
- Блог Николаса Закаса (англ.)
- Блог Джона Резига (англ.)
- Блог Стояна Стефанова (англ.)
[править] IRC
- ##javascript(англ.) — канал на Freenode.
- #javascript(рус.) — канал на RusNet.
| ECMAScript (сравнение) | |
|---|---|
| Диалекты | ActionScript · Caja · JavaScript / LiveScript · JScript · JavaScript OSA · JScript .NET · QtScript |
| Движки ECMAScript | InScript · JavaScriptCore · JScript · KJS · futhark · linear_b · Narcissus · QtScript · Rhino · SpiderMonkey · SunSpider · Tamarin · TraceMonkey · V8 · SquirrelFish |
| Другое | Brendan Eich · Ecma International |
| Основные языки программирования (список • сравнение • IDE) | |
|---|---|
| Используемые в разработке |
Ада • АПЛ • Ассемблер • ActionScript • ABAP/4 • AutoIt • AWK • BASIC • C • Кобол • C++ • C# • ColdFusion • D • dBase • Delphi • Eiffel • Erlang • Forth • Фортран • Gambas • Groovy • Haskell • Icon • Java • JavaScript • Limbo • Лисп • Lua • MATLAB • Object Pascal • Objective-C • Оберон • Parser • Паскаль • Perl • PHP • PowerBASIC • PureBasic • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • Tcl • Vala • Visual Basic • VB.NET |
| Академические | |
| IEC61131-3 |
Instruction List • ST • FBD • Ladder Diagram • SFC |
| Прочие | |
| Эзотерические |
HQ9+/HQ9++ • INTERCAL • Brainfuck • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE |
Просмотры
Личные инструменты
Навигация
Участие
Инструменты
На других языках
- Afrikaans
- العربية
- Žemaitėška
- Беларуская (тарашкевіца)
- Български
- ᨅᨔ ᨕᨘᨁᨗ
- Català
- Česky
- Dansk
- Deutsch
- Ελληνικά
- English
- Esperanto
- Español
- Eesti
- Euskara
- فارسی
- Suomi
- Français
- Galego
- עברית
- हिन्दी
- Hrvatski
- Magyar
- Interlingua
- Bahasa Indonesia
- Íslenska
- Italiano
- 日本語
- ქართული
- ភាសាខ្មែរ
- 한국어
- Lietuvių
- Latviešu
- Македонски
- മലയാളം
- Монгол
- Bahasa Melayu
- Nederlands
- Norsk (bokmål)
- Polski
- Português
- Română
- Саха тыла
- Simple English
- Slovenčina
- Slovenščina
- Shqip
- Српски / Srpski
- Svenska
- தமிழ்
- Тоҷикӣ
- ไทย
- Türkçe
- Українська
- Tiếng Việt
- 中文
- 粵語
- Последнее изменение этой страницы: 11:44, 14 октября 2009.
- Текст доступен на условиях лицензии Creative Commons Attribution/Share-Alike, в отдельных случаях могут действовать дополнительные условия. Подробнее см. Условия использования.
- Политика конфиденциальности
- Описание Википедии
- Отказ от ответственности