Введение в JavaScript

Несмотря на свое название, JavaScript связан с Java только тем, что они имеют некоторые синтаксические сходства. Синтаксис JavaScript в его первоначальной разработке был во многом вдохновлен синтаксисом Java, и он назывался «LiveScript», когда он впервые был выпущен в бета-версии Netscape Navigator в 1995 году, как для того, чтобы соответствовать некоторым другим названным предложениям Netscape, так и как намек на этот факт. что он работает «вживую» в браузере. Вскоре после этого Microsoft выпустила собственную реализацию JavaScript «JScript» в Internet Explorer 3.0.

Netscape представила эту раннюю работу Ecma International , организации, которая разрабатывает и публикует технические стандарты, чтобы формализовать и детализировать то, как этот язык сценариев должен пониматься другими браузерами. В 1997 году Ecma International выпустила ECMA-262, стандартизировав первую версию языка сценариев под названием ECMAScript. ECMAScript — это стандарт, на основе которого создаются более конкретные языки сценариев, например, более поздние разработки Microsoft над ныне несуществующим JScript, Adobe ActionScript и сам JavaScript.

Это различие важно при обсуждении конкретных аспектов и особенностей JavaScript. «ES5» относится к первому основному «версированному» выпуску стандарта ECMAScript в 2009 году, после нескольких лет более фрагментарной разработки. «ES6» (или «ES2015») — это сокращение стандартов, установленных шестым изданием ECMAScript, выпущенным в 2015 году. После ES6 новые редакции стандарта ECMAScript выпускаются ежегодно, при этом изменения и дополнения в каждом издании указываются по годам. как в «ES2016» или «ES2017».

Основные правила

В отличие от компилируемых языков, JavaScript не переводится из кода, который пишет человек, в форму, понятную браузеру. Сценарий отправляется в браузер вместе с такими ресурсами, как разметка, изображения и таблицы стилей. Браузер интерпретирует его так же, как он был написан: как удобочитаемую последовательность символов Юникода, анализируемую слева направо и сверху вниз.

Когда интерпретатор JavaScript получает сценарий, он сначала выполняет лексический анализ , анализируя длинную строку символов, составляющую сценарий, и преобразуя ее в следующие дискретные входные элементы:

  • Токены
  • Форматирование управляющих символов
  • Терминаторы линии
  • Комментарии
  • Пробелы (почти всегда означают табуляцию и пробелы).

Результаты сценария не сохранятся после перезагрузки или перехода с текущей страницы, если только вы не включите в сценарий явные инструкции, позволяющие сделать иное.

На высоком уровне приложения JavaScript состоят из операторов и выражений .

Заявления

Оператор — это единица инструкции, состоящая из одной или нескольких строк кода, которые представляют действие. Например, вы можете использовать следующий оператор, чтобы присвоить значение переменной с именем myVariable :

let myVariable = 4;

myVariable;
> 4

Для правильной интерпретации операторы должны заканчиваться точкой с запятой. Однако эти точки с запятой не всегда необходимы при написании JavaScript. Функция, называемая автоматической вставкой точки с запятой, позволяет рассматривать разрыв строки после полного оператора как точку с запятой, если ее отсутствие может привести к ошибке.

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

Операторы блока

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

Чаще всего вы будете видеть операторы блока рядом с операторами потока управления , например, if :

if ( x === 2 ) {
  //some behavior;
}

Выражения

Выражение — это единица кода, результатом которой является значение, и поэтому его можно использовать везде, где ожидается значение. 2 + 2 — это выражение, которое дает значение 4 :

2 + 2;
> 4

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

2 + 2 * 4;
> 10

( 2 + 2 ) * 4;
> 16

let myVariable = ( 2 + 2 );

myVariable;
> 4

Слабая типизация

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

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

>>> "1" + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

Вместо возврата ошибки JavaScript преобразует числовое значение в строку и объединяет два значения. Наиболее вероятное поведение при добавлении любого значения в строку:

"1" + 1;
> "11"

Типы данных также могут быть явно заданы. В следующем примере числовое значение 100 преобразуется в строковое значение "100" с помощью встроенного в JavaScript метода toString :

let myVariable = 100;

typeof myVariable;
> "number"

myVariable = myVariable.toString();
> "100"

typeof myVariable;
> "string"

Чувствительность к регистру

В отличие от HTML и большинства CSS, JavaScript сам по себе полностью чувствителен к регистру. Это означает, что вы всегда должны последовательно писать все с заглавной буквы, от свойств и методов, встроенных в язык, до идентификаторов, которые вы определяете самостоятельно.

console.log( "Log this." );
> Log this.

console.Log( "Log this too." );
> Uncaught TypeError: console.Log is not a function
const myVariable = 2;

myvariable;
> Uncaught ReferenceError: myvariable is not defined

myVariable;
> 2

Пробелы

JavaScript нечувствителен к пробелам. Это означает, что интерпретатор игнорирует количество и тип (табуляции или пробелы) используемых пробелов.

                     console.log(       "Log this"  );console.log("Log this too");
> "Log this."
> "Log this too."

Однако наличие пробелов может иметь важное значение в качестве разделителя между лексическими токенами:

let x;

[ жетоны : [let] [x] ]

letx;
> Uncaught ReferenceError: letx is not defined

[ токены : [letx] ]

Если для разделения значимых лексических токенов используются пробелы, синтаксический анализатор игнорирует количество и тип пробелов:

let           x                             =                           2;

[ токены : [let] [x] [=] [2] ]

То же самое относится и к разрывам строк, хотя бывают случаи, когда разрывы строк могут вызвать проблемы из-за преждевременного завершения оператора ):

let x
=
2;

[ токены : [let] [x] [=] [2] ]

Стилистически говоря, некоторые типы высказываний часто занимают одну строку:

let x = 1;
let y = 2;

Хотя некоторые операторы обычно используют несколько строк:

if ( x == 2 ) {
  //some behavior;
}

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

let x=1;let y=2;
if(x==2){}

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

Использование пробельных символов в JavaScript во многом зависит от предпочтений автора и сопровождающего. Проекты JavaScript, в которых несколько разработчиков вносят свой код, часто предлагают или применяют определенные соглашения о пробелах для обеспечения единообразного форматирования кода — например, использование табуляции или пробелов для отступов вложенных операторов:

let myVariable = 10;

if ( typeof myVariable === "number" ) {
    console.log( "This variable is a number." );
    if( myVariable > 5 ) {
     console.log( "This variable is greater than five." );
    }
}

> "This variable is a number."
> "This variable is greater than five."

Проверьте свое понимание

Что такое выражение?

Единица кода, которая приводит к значению.
Комментарий, объясняющий, что делает код.
Группа заявлений и деклараций.

JavaScript чувствителен к регистру.

Истинный
ЛОЖЬ