Синтаксис JavaScript – это набор правил, как создаются программы JavaScript. В этом уроке мы рассмотрим базовые лексические структуры языка.
Набор символов
При написании программ на JavaScript используется набор символов Unicode. В отличие от 7-разрядной кодировки , подходящей только для английского языка, и 8-разрядной кодировки , подходящей только для английского и основных западноевропейских языков, 16-разрядная кодировка Unicode поддерживает практически все письменные языки, имеющиеся на планете. Стандарт ECMAScript v3 требует, чтобы реализации JavaScript обеспечивали поддержку стандарта Unicode версии 2.1 или выше, а стандарт ECMAScript v5 требует, чтобы реализации обеспечивали поддержку стандарта Unicode версии 3 или выше.
Var str = "hello, world!"; // Используется латиница var стр = "Привет, мир!"; // Используется кириллица
Пробельные символы
Пробельные символы улучшают читаемость исходного кода, но эти символы, как правило, не нужны для функциональности js-сценария.
Код символа | Название | Сокращение | Описание | Escape последовательность |
---|---|---|---|---|
U + 0009 | Горизонтальная табуляция | Перемещает позицию печати к следующей позиции горизонтальной табуляции | \t | |
U + 000B | Вертикальная табуляция | Перемещает позицию печати к следующей позиции вертикальной табуляции | \v | |
U + 000C | Прогон страницы, смена страницы | Выбрасывает текущую страницу и начинает печать со следующей | \f | |
U + 0020 | Пробел | Интервал между буквами | ||
U + 00A0 | Неразрывный пробел | Символ, отображающийся внутри строки подобно обычному пробелу, но не позволяющий разорвать в этом месте строку |
В дополнение к пробельным символам символы конца строки также используются для улучшения читаемости исходного текста. Однако в некоторых случаях символы конца строки могут влиять на выполнение кода JavaScript, поскольку есть несколько моментов, когда их применение запрещено. Символы конца строки также влияют на процесс автоматической установки точки с запятой.
Следующие символы распознаются интерпретаторами JavaScript как символы конца строки:
Точка с запятой
Программа (сценарий) на языке JavaScript представляет собой перечень «инструкций», которые выполняются веб-браузером.
В JavaScript инструкции, как правило, разделяются точкой с запятой (;).
Если несколько инструкций располагаются на одной строке, то между ними следует поставить знак "точка с запятой" (;).
Во многих случаях JavaScript интерпретирует переход на новую строчку как разделитель команд для автоматического ввода точек с запятой (ASI) для завершения инструкций.
Если каждая инструкция размещается на отдельной строке, то разделитель можно не писать:
Одна инструкция может располагаться на нескольких строчках:
В этом случае JavaScript ждёт завершение выражения и поэтому автоматически не вставляет «виртуальную» точку с запятой между строчками.
Примечание: Хотя точки с запятой в конце инструкций необязательны, рекомендуется всегда добавлять их. Сейчас это правило, которому следуют все большие проекты.
Это правило предотвращает некоторые ошибки, например незавершенный ввод, а также позволяет сжимать кoд за счет удаления пустых мест. Сжатие кода без точек с запятой приводит к синтаксическим ошибкам. Кроме того, наличие точек с запятой препятствует снижению быстродействия, потому что синтаксические анализаторы пытаются исправлять предполагаемые ошибки, добавляя недостающие точки с запятой.
Чувствительность к регистру
Для написания JavaScript-пpoгpaмм используется набор символов Unicode, который включает в себя наборы ASCII и Latin-1 и поддерживается практически всеми языками и платформами.
В JavaScript все элементы, включая имена переменных, функций и операторов, чувствительны к регистру и должны всегда содержать одинаковые наборы прописных и строчных букв. Например, ключевое слово while должно набираться как «while», а не «While» или «WHILE».
Аналогично num, NUM и Num – это три разные переменные:
Комментарии
Комментарии позволяют выделить фрагмент программы, который не выполняется интерпретатором JavaScript, а служит лишь для пояснений содержания программы.
Комментарии в JS могут быть однострочными и многострочными.
Однострочные комментарии начинаются с двойного слэша // . Текст считается комментарием до конца строки:
Многострочный комментарий начинается с слэша и звездочки (/*) , а заканчивается ими же в обратном порядке (*/) . Так можно закомментировать одну и более строк:
Совет: Не пренебрегайте комментариями в своих кодах. Они пригодятся вам при отладке и сопровождении программ. На этапе разработки бывает лучше закомментировать ненужный фрагмент программы, чем просто удалить. А вдруг его придется восстанавливать?
Идентификаторы
Идентификатор - это последовательность букв, цифр, символов подчёркивания (_) и знаков доллара ($) . Цифра не может быть первым символом идентификатора, т. к. тогда интерпретатору JavaScript труднее отличать идентификаторы от чисел. Идентификаторы выступают в качестве имён переменных, функций, свойств объекта и т. д.
Для совместимости и простоты редактирования для составления идентификаторов обычно используются только символы ASCII и цифры. Однако в ECMAScript v3 идентификаторы могут содержать буквы и цифры из полного набора символов Unicode. Это позволяет программистам давать переменным имена на своих родных языках и использовать в них математические символы:
Var имя = "Макс"; var Π = 3.14;
Исторически, программисты использовали разные способы объединения нескольких слов для записи идентификаторов. Сегодня есть два устоявшихся негласных стиля: camelCase и snake_case.
В JavaScript наиболее популярным стилем именования идентификаторов, состоящих из нескольких слов, является camelCase – "верблюжья" нотация. Это означает, что первая буква является строчной, а первые буквы всех последующих слов – прописными, например:
Var firstSecond; var myCar = "audi"; var doSomethingImportant;
Внимание: В JavaScript объединение нескольких слов для записи идентификаторов с применением дефисов запрещено. Они зарезервированы для математических вычитаний.
На заметку: В JavaScript ключевые слова, зарезервированные слова и значения true , false и null не могут быть идентификаторами.
Ключевые и зарезервированные слова
Стандарт ЕСМА-262 определяет набор ключевых слов (keywords), которые не могут использоваться в качестве идентификаторов. Зарезервированные слова имеют определенное значение в языке JavaScript, так как они являются частью синтаксиса языка. Использование зарезервированных слов приведет к ошибке компиляции при загрузке скрипта.
Зарезервированные ключевые слова по версии ECMAScript® 2015
- break
- catch
- class
- const
- continue
- debugger
- default
- delete
- export
- extends
- finally
- function
- import
- instanceof
- return
- super
- switch
- throw
- typeof
- while
- yield
Ключевые слова, зарезервированные на будущее
Кроме того, ЕСМА-262 содержит набор зарезервированных слов (reserved words), которые также нельзя использовать как идентификаторы или имена свойств. За ними сейчас не стоит никакой функциональности, но она может появиться в будущих версиях:
- await
В строгом (strict) режиме в этот список добавляются следующие слова:
- implements
- package
- protected
- static
- interface
- private
- public
Зарезервированные ключевые слова в версиях ECMAScript® от 1 по 3
- abstract
- boolean
- double
- final
- float
- native
- short
- synchronized
- transient
- volatile
В 5-й редакции ECMAScript немного изменены правила употребления ключевых и зарезервированных слов. Как и прежде они не могут быть идентификаторами, но теперь их допустимо использовать как имена свойств в объектах. Тем не менее, для обеспечения совместимости с прошлыми и будущими редакциями ECMAScript всё-же лучше не использовать ключевые и зарезервированные слова как идентификаторы и имена свойств.
Итоги
- Интерпретатор JavaScript игнорирует все пробельные символы которые могут присутствовать между языковыми конструкциями и воспринимает текст программы как сплошной поток кода.
Кроме того, JavaScript также, по большей части, игнорирует символы перевода строки. Поэтому пробелы и символы перевода строки могут без ограничений использоваться в исходных текстах программ для форматирования и придания им удобочитаемого внешнего вида. - Пропуск точек с запятой нельзя признать правильной практикой программирования, и поэтому желательно выработать привычку их использовать.
- В JavaScript все элементы, включая имена переменных, функций и операторов, чувствительны к регистру и должны всегда содержать одинаковые наборы прописных и строчных букв.
- Не пренебрегайте комментариями в своих кодах. Они пригодятся вам при отладке и сопровождении программ. Не переживайте насчет увеличения размера кода, т.к. существуют инструменты сжатия JavaScript, которые, при публикации, легко удалят комментарии.
- Идентификаторы выступают в качестве имён переменных, функций, свойств объекта и состоят из последовательности букв, цифр, символов подчёркивания (_) и знаков доллара ($) .
- Ключевые слова JavaScript, применяемые для обозначения элементов синтаксиса языка, а также другие слова, зарезервированные на будущее, нельзя использовать в качестве имен переменных, функций и объектов.
Программа на JavaScript – это последовательность инструкций (statements) . Иногда инструкции ещё называют командами JavaScript.
Чтобы программа выполнилась её необходимо запустить. В случае если программа является клиентским сценарием, то её запуск осуществляется автоматически браузером, но только в том случае если она, конечно, присутствует в коде страницы. Осуществляет браузер выполнение программы обычно в процессе загрузки веб-страницы.
При написании инструкций, их между собой необходимо разделять точкой с запятой. В JavaScript допускается не ставить точку с запятой в конце инструкции, если следующая инструкция будет начинаться с новой строки.
Завершать инструкции точкой с запятой в JavaScript не требуется, если следующая инструкция будет записана с новой строки, но настоятельно рекомендуется . При этом желательно также каждую инструкцию располагать на отдельной строке.
Инструкции JavaScript состоят из: значений , операторов , выражений , ключевых слов и комментариев .
Например, эта инструкция говорит браузеру написать «Привет, мир!» внутри HTML элемента с id="main":
Document.getElementById("main").textContent = "Привет, мир!";
JavaScript значения
Синтаксис JavaScript определяет следующие типы значений (values): фиксированные значения (литералы) , значения констант и значения переменных .
Примеры литералов для представления различных значений в JavaScript:
17 // литерал целого числа 23.8 // литерал дробного числа "HTML" // литерал строки "HTML" // литерал строки true // логический литерал // литерал массива // литерал массива {} // литерал объекта { name: "Деннис", language: "ru" } // литерал объекта (ab|bc) // литерал регулярного выражения
В языках программирования константы и переменные используются для хранения значений данных .
Для объявления констант используется ключевое слово const , переменных – var и let .
Const MAX_LENGTH = 17; // константа var section = "HTML"; // переменная let arr = ["HTML","CSS"]; // переменная
let – это новый способ объявление переменных, который появился начиная с версии ES-2015 (ES6). Отличается let от var тем, что переменная, объявленная с помощью let , имеет другую область видимости (блочную), а также ещё тем, что к ней можно обратиться только после её создания.
Операторы JavaScript
В JavaScript имеется очень много различных операторов . Они обозначают операцию, которую нужно произвести .
В зависимости от количества операндов , с которыми оперирует оператор , они делятся на бинарные и унарные . Но в JavaScript также имеется ещё условный оператор, который состоит из 3 операндов . Данный оператор называется тернарным .
Например, оператор присваивания (знак =):
// operand1 = operand2; coorX = 100; // например присвоить переменной coordX число 100
Данный оператор используется для присвоения (установки) operand1 такого значения, которое имеет operand2 .
Оператор присваивания является бинарным , т.к. он оперирует двумя операндами.
Например, оператор инкремента (знак ++) используется для увеличения числового значения операнда на 1:
Var num = 5; ++num; // 6
Оператор инкремента является унарным , т.к. он оперирует одним операндом.
JavaScript выражения
Выражение (expression) - это комбинация значений, переменных и операторов, которые либо присваивают переменной значение, либо возвращают какое-то значение без его присваивания.
Например, выражение num = 955.47 использует оператор = для присваивания переменной num значения 7.
Например, выражение "Привет, " + "Тимофей" использует оператор + для сложения строк "Привет, " и "Тимофей" без присваивания.
Ключевые слова JavaScript
Инструкции JavaScript часто начинаются с ключевого слова (keyword). Оно (ключевое слово) предназначено для того чтобы определить какое действие JavaScript необходимо выполнить.
Например, ключевое слово var указывает браузеру создать переменные:
Var coordX = 5, coordY = 130;
Список некоторых ключевых слов: break , continue , do ... while , for , function , if ... else , return , switch , try ... catch , var .
Комментарии в JavaScript
Не все инструкции JavaScript являются выполняемыми.
Код после двойных косых черт // или между /* и */ рассматривается как комментарий .
Комментарии игнорируются и не выполняются:
Var direction = "top"; // однострочный комментарий // var speed = 10; эта инструкция не будет выполнена /* Функция, добавляющая к элементу с id="myBtn" класс show */ function showBtn() { document.getElementById("myBtn").classList.add("show"); }
// - является однострочным комментарием, т.е. любой текст между // и концом строки будет игнорироваться JavaScript (не будет выполняться).
/* */ - является многострочным комментарием, любой текст, находящийся между /* и */ будет игнорироваться JavaScript.
Блок инструкций JavaScript
JavaScript инструкции можно сгруппировать с помощью блока (фигурных скобок {...}).
Как правило, используется в функциях, управляющих структурах (for, while) и др.
Function myFunction() { document.getElementById("id__1").textContent = "Текст 1..."; document.getElementById("id__2").textContent = "Текст 2..."; }
Чувствительность к регистру
JavaScript является регистрозависимым языком . Это значит, что ключевые слова, переменные, имена функций и другие идентификаторы языка должны содержать одинаковые наборы прописных и строчных букв. Например, метод alert должно набираться только как alert , а не Alert , ALERT и т.п.
Пробелы в JavaScript
JavaScript игнорирует несколько пробелов . Можно добавить пробелы в сценарий, чтобы сделать его более читаемым.
Следующие строки эквивалентны:
Var str = "Текст"; var str="Текст";
Длина строки кода
Если JavaScript инструкция имеет большую длину, то её желательно разорвать. В большинстве случае разрыв инструкции лучше осуществить после какого-нибудь оператора.
Например:
Document.getElementById("aside__nav_header").innerHTML = "Дополнительная навигация (по разделу)";
- имя, состоящее из одного слова, следует писать строчными буквами (например: article);
- имя, состоящее из нескольких слов, следует писать слитно строчными буквами, кроме букв на стыке слов, их необходимо писать прописными (например: articleTitle);
- количество слов в имени не должно превышать 3 (например: articleDatePublishedon)
- переменные (не для хранения функций) и свойства объектов должны быть существительными (например: textComment);
- массивы и коллекции значений следует задавать существительными во множественном числе (например: lastComments);
- именовать функции и методы объектов необходимо глаголами (например: getLastArticles);
- именование классов необходимо начинать с прописной буквы (например: Comments).
Программа на JavaScript состоит из переменных, операторов, функций, объектов и других конструкций языка. Все они будут подробно рассмотрены в данном учебнике. А в этой теме я расскажу, как они пишутся в коде программы. Синтаксис JavaScript обыкновенный и во многом совпадает с другими языками прораммирования.
Пробелы и перевод строки
JavaScript не требует присутсвия пробелов между переменными и различными орераторами. Но позволяет ставить пробелы там, где Вам нужно:
Перевод строки тоже можно производить там, где Вам удобно. Есть одно исключение: нельзя делать перевод строки внутри текста, находящегося в кавычках. Подробнее этот вопрос будет рассмотрен при изучении строк. В остальных случаях Вы сами решаете, где переводить строку
Можно написать так:
Однако, я рекомендую ставить точку с запятой после каждого оператора и вызова функции. Во-первых, отсутствие точки с запятой допустимо не всегда, и может возникнуть ошибка. Во-вторых, это распространённый стиль грамотного написания кода, и лучше сразу к нему привыкать. Желательно соблюдать правило: каждая строка должна заканчиваться точкой с запятой. Исключение составляют конструкции языка, для которых предусмотрены свои знаки. Например, некоторые операторы.
При написании своих названий, например, при создании переменных, тоже учитывается регистр символов. company и Company - это две разные переменные.
JavaScript — язык и у него есть свой собственный синтаксис, который было бы неплохо отлично знать.
JavaScript программа состоит из предложений, которые разделяются точкой с запятой.
Иногда точку с запятой можно упустить и это сойдет с рук, но не всегда. Поэтому в том случае, когда подразумевается конец предложения, лучше не забыть ее ставить.
Если вы по невнимательности пропускаете точку с запятой, пробелы, ну или по другой причине ваш код не имеет стиль (а это важно!), то советую ESLint .
Предложения состоят из:
- Значений
- Операторов
- Выражений
- Ключевых слов
- Комментариев
В JavaScript существует два типа значений: переменные и литералы.
Переменные
Переменные используются для хранения значений. Для объявления переменных в JavaScript используется ключевое слово var
.
Переменные мы можем объявить тремя вариантами:
- С помощью ключевого слова var. Например, var y = 56;
- Просто присвоив значение. Например, y = 56;
Но этот вариант нежелателен, так как в таком случае переменная становится глобальной.
Почему глобальная переменная – это плохо? Хотя бы потому, что становясь глобальной она выходит из-под контроля области действия функции. Она может быть как изменена другим кодом, так и сама переписать значение в чужом коде - С помощью ключевого слова let.
Т.к. в JavaScript (до ECMAScript 6) не существует область видимость в пределах блока, то ввели let, позволяющее объявить переменные с областью видимости – блок.
Например, if (true) {let y = 4;} console.log(y); // ReferenceError: y is not definedПосмотреть текущую поддержку ES6 можно .
Литералы
Литералы — фиксированные значения. К ним относятся такие типы данных как null, Boolean, Number, Object, String.
Например, когда мы объявляем массив, то часть, которая идет после знака равно является литералом массива.
Var food = [‘cheese’,’potates’,’cucumber’];
А food — это переменная.
Числа
Числа записываются как с десятичными знаками, так и без них.
10.50 1001
Для того, чтобы интерпретатор понял, что означает точка – вызов метода или плавающую точку, нам нужно ему подсказать, одним из способов:
1..toString() 1 .toString() // пробел перед точкой (1).toString() 1.0.toString()
Строка (String)
String — текст, написанный с помощью двойных или одинарных кавычек.
"I am string“ "And I am string‘
По-хорошему, вам надо определить какие кавычки использовать и следовать своему выбору во время написания кода.
В настройках ESLint по-умолчанию даже предоставляют выбор, по результатам которого, код будет проверяться.
Идентификаторы
Название, которое мы дает переменным, функциями, свойствам называется идентификатором.
Он может содержать только буквенно-цифровые символы, «$» и «_».
Чем идентификатор отличается от String?
String – данные, а идентификатор часть кода.
Var surname = “Smit”;
“Smit” однозначно данные — литерал строки, тогда как surname – хранилище для этого значения.
Обратите внимание, что дефис в идентификаторе не допускается, так как он используется для вычитания.
Выражения
Выражение — комбинация значений, переменных, операторов, которая вычисляет значение.
Например выражение, 3 * 5
вычисляет 15.
Выражение может содержать и переменную
x * 4
Конечно, значения могут быть и строкой.
Например выражение:
"The day" + " is " + "sunny" //вычисляется в строку "The day is sunny".
Выражения можно разделить на те, что присваивают значение переменной и на те которые просто вычисляют значения.
Первый случай:
а второй:
Кстати, стоит нам добавить точку с запятой и у нас уже не выражение, а предложение!
Var x = 56;
Запятая для выражений
Запятая вычисляет оба операнда и возвращает правое значение.
Var x = 0; var y = (x++, 4); console.log(x); //1 console.log(y); //4
Выражения вычисляют значение и могут быть написаны везде, где значение ожидается. Например, аргумент в вызове функции или правая часть присваивания.
Каждая из следующих строк содержит выражение:
X x + 6 changeArray("a","b")
Везде где js ожидает предложение, вы можете также писать и выражения.
Подобное предложение называется инструкция-выражение.
Но вы не можете писать предложение, где js предполагает выражение. Например IF предложение не может стать аргументом функции.
Сравнение предложения и выражения
Взглянем на IF предложение и на условный оператор, который является выражением.
Var result; if (x > 0) { result = "Положительное число"; } else { result = "Отрицательное число"; }
Эквивалентно:
Var result = (x > 0 ? "Положительное число" : "Отрицательное число");
Между знаком =
и ;
выражение.
Для того, чтобы предотвратить двусмысленность при синтаксическом разборе, JS не позволяет использовать литералы объекта и выражения функций как предложения.
Из этого следует, что предложения-выражения не должны начинаться с:
- фигурных скобок
- с ключевого слова function
Если выражение начинается с того либо с другого, то следует его писать в контексте выражения.
Для этого выражение помещается скобки.
Функция-объявление и функция-выражение
Допустим, мы хотим объявить анонимную функцию-выражение, тогда пишем так:
(function(){return "ready!")());
Давайте рассмотрим, чем эта функция будет отличаться от функции-объявления вида
Function getReady() { return "ready!" }
- Очевидно, что у анонимной нет имени. Но оно вполне может быть, тогда это будет именованная функция-выражение.
- Функция-объявление создается интерпретатором до выполнения кода, функция-выражение же только по время выполнения.
- Следовательно функции-выражения не доступны до их объявления.
А если мы запишем так?
GetReady(); var getReady = function(){ return "ready!"; } getReady();
В первой строчке получим ошибку: TypeError: getReady is not a function
Пятая же выведет нам «ready», так как функция была уже объявлена.
Это явление называется всплытием (hoisting), почему оно происходит описано в посте про .
Синтаксис JavaScript
С 1995 года JavaScript прошел длинный путь от скромного компонента браузера Netscape до современных высокопроизводительных JIT-интерпретаторов. Казалось бы, всего лет пять назад разработчики были ошеломлены появлением Ajax, а уже сейчас сложные JavaScript-приложения достигли объемов в сотни и тысячи строк кода.
В прошлом году появилось новое поколение JavaScript-приложений, ничем не отличающихся от приложений рабочего стола, - невероятный прогресс веб-технологий. Ушли в прошлое медленно выполняемые запросы страниц при каждом взаимодействии пользователя с приложением. Движки JavaScript стали настолько мощными, что появилась возможность сохранять состояние на стороне клиента, что существенно ускорило реакцию приложения и улучшило качество его работы.
Если вы знаете другие языки программирования, вам может оказаться полезна информация, что JavaScript является высокоуровневым, динамическим, нетипизированным и интерпретируемым языком программирования, который хорошо подходит для программирования в объектно-ориентированном и функциональном стилях. Свой синтаксис JavaScript унаследовал из языка Java, свои первоклассные функции – из языка Scheme, а механизм наследования на основе прототипов – из языка Self. Но вам не требуется знать все эти языки или быть знакомыми с их терминологией для изучения JavaScript.
В этой статье мы рассмотрим базовые лексические структуры языка.
Символы
При написании программ на JavaScript используется набор символов Юникода. Юникод является надмножеством кодировок ASCII и Latin-1 и поддерживает практически все письменные языки, имеющиеся на планете. Стандарт ECMAScript 3 требует, чтобы реализации JavaScript обеспечивали поддержку стандарта Юникода версии 2.1 или выше, а стандарт ECMAScript 5 требует, чтобы реализации обеспечивали поддержку стандарта Юникода версии 3 или выше.
Чувствительность к регистру
JavaScript – это язык, чувствительный к регистру символов. Это значит, что ключевые слова, имена переменных и функций и любые другие идентификаторы языка должны всегда содержать одинаковые наборы прописных и строчных букв.
Например, ключевое слово while должно набираться как «while», а не «While » или «WHILE». Аналогично myvar, Myvar, MyVar и MYVAR – это имена четырех разных переменных. Заметим, однако, что язык разметки HTML (в отличие от XHTML) не чувствителен к регистру. Так как HTML и клиентский JavaScript тесно связаны, это различие может привести к путанице. Многие JavaScript-объекты и их свойства имеют те же имена, что и теги и атрибуты языка HTML, которые они обозначают. Однако если в HTML эти теги и атрибуты могут набираться в любом регистре, то в JavaScript они обычно должны набираться строчными буквами.
Например, атрибут onclick обработчика события чаще всего задается в HTML как onClick, однако в JavaScript-коде (или в XHTML-документе) он должен быть обозначен как onclick.
Пробелы, переводы строк и символы управления форматом
JavaScript игнорирует пробелы, которые могут присутствовать между лексемами в программе. Кроме того, JavaScript также по большей части игнорирует символы перевода строки. Поэтому пробелы и символы перевода строки могут без ограничений использоваться в исходных текстах программ для форматирования и придания им удобочитаемого внешнего вида.
Помимо обычного символа пробела (\u0020 ) JavaScript дополнительно распознает как пробельные следующие символы: табуляция (\u0009 ), вертикальная табуляция (\u000B ), перевод формата (\u000C ), неразрывный пробел (\u00A0 ), маркер порядка следования байтов (\uFEFF ), а также все символы Юникода, относящиеся к категории Zs.
Следующие символы распознаются интерпретаторами JavaScript как символы конца строки: перевод строки (\u000A ), возврат каретки (\u000D ), разделитель строк (\u2028 ) и разделитель абзацев (\u2029 ). Последовательность из символов возврата каретки и перевода строки интерпретируется как единственный символ завершения строки.
Символы Юникода, управляющие форматом (категория Cf), такие как RIGHT-TO-LEFT MARK (\u200F ) и LEFT-TO-RIGHT MARK (\u200E ), управляют визуальным представлением текста, в котором они присутствуют. Они имеют большое значение для корректного отображения текста на некоторых языках и являются допустимыми в комментариях JavaScript, строковых литералах и в литералах регулярных выражений, но не в идентификаторах (таких как имена переменных), определяемых в программах JavaScript. Исключение составляют ZERO WIDTH JOINER (\u200D ) и ZERO WIDTH NON-JOINER (\u200C ), которые можно использовать в идентификаторах при условии, что они не являются первыми символами идентификаторов.
Полную таблицу символов Unicode вы можете посмотреть на сайте Unicode Table .
Необязательные точки с запятой
Как и в других языках программирования, для отделения инструкций друг от друга в языке JavaScript используется точка с запятой (;). Использование точек с запятой имеет важное значение для ясного выражения намерений программиста: без этого разделителя по ошибке можно принять конец одной инструкции за начало следующей и наоборот.
Обычно в JavaScript точку с запятой между инструкциями можно не ставить, если они находятся в разных строках. (Точку с запятой можно также опустить в конце программы или если следующей лексемой в программе является закрывающая фигурная скобка }.) Многие программисты на JavaScript используют точки с запятой для явного обозначения концов инструкций, даже если в этом нет необходимости.
Взгляните на следующий фрагмент. Поскольку две инструкции находятся в разных строках, первую точку с запятой можно опустить:
Однако если эти инструкции записать, как показано ниже, первая точка с запятой становится обязательной:
Комментарии
JavaScript поддерживает два способа оформления комментариев. Любой текст между символами // и концом строки рассматривается как комментарий и игнорируется JavaScript. Любой текст между символами /* и */ также рассматривается как комментарий. Эти комментарии могут состоять из нескольких строк, но не могут быть вложенными. Следующие строки представляют собой корректные JavaScript-комментарии:
// Это однострочный комментарий. /* Это тоже комментарий */ // а это другой комментарий. /* Это еще один комментарий. Он располагается в нескольких строках. */
Идентификаторы и зарезервированные слова
Идентификатор - это просто имя. В JavaScript идентификаторы выступают в качестве имен переменных и функций, а также меток некоторых циклов. Идентификаторы в JavaScript должны начинаться с буквы, с символа подчеркивания (_) или знака доллара ($) . Далее могут следовать любые буквы, цифры, символы подчеркивания или знаки доллара. (Цифра не может быть первым символом, так как тогда интерпретатору трудно будет отличать идентификаторы от чисел.) Примеры допустимых идентификаторов:
I my_variable_name v13 _myvar $str
Для совместимости и простоты редактирования для составления идентификаторов обычно используются только символы ASCII и цифры. Однако JavaScript допускает возможность использования в идентификаторах букв и цифр из полного набора символов Юникода. Это позволяет программистам давать переменным имена на своих родных языках и использовать в них математические символы:
Var имя = "Александр"; var Π = 3.14;
JavaScript резервирует ряд идентификаторов, которые играют роль ключевых слов самого языка. Эти ключевые слова не могут служить идентификаторами в программах. JavaScript также резервирует некоторые ключевые слова, которые в настоящее время не являются частью языка, но которые могут войти в его состав в будущих версиях. В приведенной таблице перечислены все ключевые слова по категориям:
Категория | Ключевые слова |
---|---|
Базовые идентификаторы | break delete function return typeof case do if switch var catch else in this void continue false instanceof throw while debugger finally new true with default for null try |
Новые ключевые слова в стандарте EcmaScript 5 | class const enum export extends import super |
Зарезервированные слова в строгом режиме (в обычном они доступны) | implements let private public yield interface package protected static |