JavaScript

Материал из Энциклопедия о программировании
(перенаправлено с «JS»)
Перейти к: навигация, поиск

JavaScript (сокращённо JS, он же Ява скрипт, Джава скрипт, ранее так же именовался LiveScript) — популярный в web прототипно-ориентированный динамически типизированный Си-подобный нестандартизованный сценарный интерпретируемый язык программирования.

Применение

JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам.

История названия

JavaScript появился во времена бурного развития и рассвета языка Java в 90-ых годах 20-ого века. Тогда Java был самым популярным и всем казалось, что вскоре он полностью вытеснит собой большинство других языков. На волне популярности названия Java и был придуман LiveScript, а после, для успешности (ведь как корабль назовёшь, так он и поплывёт) переименован в более харизматичное название JavaScript. Название было взято просто из-за популярности и успешности языка Java. На деле JavaScript не имеет ничего общего с Java за исключением лишь пары похожих по названиям и функционалу функций базовой библиотеки.

Влияние

На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом лёгким для использования непрограммистами.

Владение

Языком JavaScript не владеет какая-либо компания или организация, что отличает его от ряда языков программирования, используемых в веб-разработке. Однако само название «JavaScript» является зарегистрированным товарным знаком компании Oracle Corporation.

Стандартизация

Никто не занимается стандартизацией языка JavaScript. Точно также как им никто и не владеет. Поэтому JavaScript в основном зависит от конкретного интерпретатора, который его непосредственно выполняет. Большинством разработчиков интерпретаторов для JavaScript считается хорошим тоном следовать стандартам языка ECMAScript, который действительно развивается и чётко стандартизируется. Официально JavaScript является диалектом и расширением языка ECMAScript, но на деле цельного языка JavaScript попросту нет. В обыденности JavaScript это не что иное как стандарт ECMAScript и добавленные функции конкретно от разработчика используемого интерпретатора.

Проще говоря, цельного языка JavaScript нет, это фикция. У каждого разработчика интерпретатора языка JavaScript существует какой-то свой отдельный язык JavaScript потому что нет никакого единого стандарта языка JavaScript, как и нет самого цельного языка JavaScript. Есть язык ECMAScript, который развивается и стандартизируется, и есть интерпретаторы, которые позиционируют себя как интерпретаторы языка JavaScript. Эти интерпретаторы все разные, но большинство из них старается следовать всем текущим стандартам ECMAScript, но так как они именно JavaScript, то все они добавляют множество лично своего, что делает их значительно разными. Например, популярный движок JavaScript V8 с открытым программным кодом, распространяемый по лицензии BSD, разработанный датским отделением компании Google и встроенный в браузер Google Chrome это один JavaScript, а JavaScript run-time environment (среда выполнения JavaScript) в платформе Node.js это соврешенно другой JavaScript.

С технической точки зрения нет никакого JavaScript, а есть ECMAScript со своими чёткими стандартами. Именно этим в первую очередь и интересуются разработчики, когда выбирают т. н. среды выполнения (движки) JavaScript. У каждой версии ECMAScript есть чёткие стандарты. У JavaScript никаких стандартов нет так как это не полноценный язык. Зная это многие сразу уточняют о каком именно JavaScript идёт речь в плане среды выполнения (движка) или браузера. Таким образом самыми популярными языками JavaScript являются «JavaScript of V8» (JavaScript by Google, JavaScript of Google Chrome), «JavaScript of Node.js» (JavaScript by Node.js Developers), «JavaScript of Mozilla Firefox» (JavaScript by Mozilla).

Особенности

JavaScript это тот язык программирования в котором абсолютно всё является объектами. Даже при создании обычной переменной типа string или number или других, на самом деле создаётся объект. Функции так же являются объектами.

В зависимости от типа объекта у него есть свои базовые методы определённые в классе объекта. Например, у класса Integer есть базовый метод toString, который по-умолчанию, при вызове без передачи параметров, переводит в строку число хранимое в объекте.

Основные архитектурные черты: динамическая типизация, слабая типизация, автоматическое управление памятью, прототипное программирование, функции как объекты первого класса.

Стандартная библиотека

В js всё является объектами, поэтому вся стандартная библиотека функций хранится в различных объектах.

Главные отличия JavaScript от других Си-подобных языков

При изучении языка JavaScript у многих возникают некоторые трудности в связи с тем, что JavaScript хоть и Си подобный но имеет некоторые серьёзные, из привычного ряда вон выходящие, отступления от базового Си подобного синтаксиса. У JavaScript имеется своя извращённая концепция представления объектов, по сути всё в JavaScript состоит из объектов. Вообще сложно понимать концепцию данного языка без понимания полноценной объектно-ориентированной парадигмы, которая имеется в тех же C++, Java, C# и других языках программирования.

В JavaScript всё является объектами, абсолютно всё. Стандартная библиотека языка состоит из объектов. Эти объекты в нормальном понимании ООП являются ни чем иным как предопределёнными классами, в здравых полноценных языках так и есть, но в JS это объекты. При этом, работая с JavaScript, о самом слове «класс» можно забыть, так как официально их там нет, есть только объекты. В общем немного нелепая модель кастрированного ООП получается. Естественно это было сделано изначально для простоты и облегчения понимания концепции ООП. В общем хотели как лучше, а получилось как всегда. Во всём остальном JavaScript мало чем отличается от других Си подобных объектно-ориентированных языков программирования за исключением следующих моментов.

В JavaScript широко практикуются следующие вещи
Функции в функциях (вложенность функций);
function someFunc() {
    function foo () {
        return true;
    }
}

Внутри функции someFunc объявлена другая функция.

Ссылкой на функцию может быть переменная (или свойство) путём присвоения функции переменной;

var foo = function a() {
    return 1;
}

Переменная foo содержит ссылку на функцию a. Именно ссылку а не результат работы функции. Теперь обратиться к функции a можно через имя переменной foo следующим образом: foo();

Можно определять безымянные функции;

function() {
    alert("some text");
}

Применение методов стандартной библиотеки к элементам через точку;

var str = "some string";
var foo = str.toString()

Переменная str явно преобразовывается в тип string. Всё потому, что каждая переменная идеологически является объектом.

Зарезервированные имена (идентификаторы) в JavsScript

Некоторые из зарезервированных имён в js на самом деле не используются в то же время как есть некоторые не зарезервированные имена, которые, как раз таки, используются.

  • break
  • case
  • catch
  • continue
  • debugger
  • default
  • delete
  • do
  • else
  • finally
  • for
  • function
  • if
  • in
  • instanceof
  • new
  • return
  • switch
  • this
  • throw
  • try
  • typeof
  • var
  • void
  • while
  • with
  • class
  • enum
  • export
  • extends
  • import
  • super

Выражения, языковые конструкции и прочее в JavaScript

Языковые конструкции (синтаксис) Название (краткое описание) Description (подробное описание)
Выражения
var x = y; Переменная декларируемая без ключевого слова var является глобальной а не локальной, что нежелательно. x-имя переменной, y-заносимое значение
x = ["y",z,w];Сокращённая форма записи создания массиваx- имя массива, y — первый строчный

элемент массива, z — втрой числовой элемент массива, w- третий числовой элемент массива. Если в качестве элементов указаны массивы то этот массив

будет многомерным
var foo = "this string";Сокращённая форма записи создания строковой переменной.
var foo = new String("this string");Полная форма записи создания строковой переменной.
var x = new Array();Полная форма записи создания массива
function x(y,z) {z} Именованная функция x-имя функции, y z — передаваемые значения, z-тело функции. Чтобы вернуть значение из функции надо использовать метод return x; в теле функции
var имя = function(параметры) {…}
Анонимная функция (FunctionExpression)
var имя = new Function(параметры, '...')
Анонимная функция (FunctionExpression) созданная при помощи new и объекта Function
var x = new Object(); Создание нового объекта x класса объекта Object В переменной x будет находится ссылка на созданный объект.
x.y = z; Создание элемента (свойства или метода) созданного ранее объектаx — созданный объект y — свойство объекта z — параметр свойства
x["y"] = z; Индексное создание элемента (свойства или метода) созданного ранее объектаx — объект, y — свойство или метод объекта, z — параметр свойства
var x = {y:z, y1:z1}; Создание нового объекта и задание ему свойств x — созданный объект y — свойство объекта z — параметр свойства
var person = {
	name : "Alex", 
	wife : {
		name : "Eve",
		age : 29
		},
	"age" : 25
};
Создание нового объекта и присвоение его свойству нового объекта. Объект свойство которого является объектом, то есть объект содержащий в себе другой объект. person — создаваемый объект; name — свойство объекта (корректное строковое название свойства объекта допускается указывать без кавычек), wife — свойство-объект, то есть вложенный объект
x.y = function(z1,z2,z3,…) {
    w;
    return u;
};
Создание метода для объекта x — объект, y- метод z-передаваемые параметры w-тело метода u — что вернуть
var Human = {
	type : "Human",
	head : 1,
	legs : 2
};
var Megahuman = Object.create(Human);
Создание объекта-прототипа Human и наследуемого от него объекта Megahuman. Объект Megahuman наследуется от объекта Human Human — объект-прототип по которому будет создаваться другой объект; Megahuman — объект создаваемый на основе объекта-прототипа Human
Объекты
navigator Позволяет узнать много информации о машине пользователя
screen Позволяет узнать много информации экране пользователя
math Выполняет различные операции с числами
location Позволяет узнать много информации адресе страницы
Условные операторы ветвления
if (x) {y} Условие «Если» x — условие, y — действие при выполнении условия
if (x) {y} else {z} Условие «Если-Иначе» x — условие, y — действие при выполнении условия, z -действие при невыполнении условия
if (x && w) {y} else {z} Множественное условие && — означает «И», w- втрое условие. Чтобы была истина необходимо выполнение всех условий
if (x || w) {y} else {z} Условие «Или» || - означает «Или» Чтобы была истина необходимо выполнение хотябы одного условия
if (x) {y} else if(z) {w} else Несколько условий одновременно z — следующее условие, w — следующее действие и так много раз
switch(x) {
    case <value1>: y;
    break;
    case <value2>: y;
    break;
    ...
    default: y;
}
Конструкция ветвления switch case где x — проверяемое значение, <value1> — текущее значение сверяемое с x, y - действие если true
Циклы
while(x) {z}  Цикл Вайл циклируется до вполения условия x-условие, z- тело цикла (тут же надо прибавлять счётчик, что бы цикл не зациклился)
for (x;y;z) {w} Цикл Фор x-установка счётчика, y-условие, z-что делать с счётчиком
for (var i in arr) {w} Цикл foreach в js i-переменная в которую будет поочерёдно заноситься каждый элемент массива, arr-перебираемый в цикле массив
Операторы
(x==y) ? Z : w; Тернарный оператор, сокращение от If alse вернёт значение z или w где x сравнивается с y z-если ровно w-если не ровно

Примеры

Метод toString()

int foo = 5;
foo.toString();

Метод объекта берёт значение из своего же объекта.

Свойство length

var str = "Hello World!";
str.length;

Обращаемся к свойству (перемнной) length обеъкта str.

Приступая к работе

При написании скрипта на JavaScript для web в первую очередь нужно позаботиться о том, что бы весь скрипт начал исполняться движком javascript браузера только тогда, когда будет загружен полностью весь документ (вся страница), иначе в процессе работы скрипта могут быть ошибки, особенно когда идёт обращение к DOM. Для этого весь код JavaScript обычно пишется в теле функции которая заносится в свойство, представляющее собой событие onload объекта window.

window.onload = function() {
    /* тут весь js код */
}

Такой здравый подход исключает ошибки связанные в первую очередь с недостающими (не найденными) элементами в DOM.

Данный материал относится к ЯП JS.Шаблон:Programming languages