Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
50. JavaScript. Лексическая структура. Переменные. Выражения и операторы.
Лексическая структура
Лексическая структура языка программирования – это набор элементарных правил, определяющих, как пишутся программы на этом языке. Это низкоуровневый синтаксис языка; он задает вид имен переменных, символы, используемые для комментариев, и то, как одна инструкция отделяется от другой. Эта короткая глава документирует лексическую структуру javascript.
2.1. Набор символов
При написании программ на javascript используется набор символов Unicode. В отличие от 7разрядной кодировки ASCII, подходящей только для английскогого языка, и 8разрядной кодировки ISO Latin1, подходящей только для английского и основных западноевропейских языков, 16разрядная кодировка Unicode обеспечивает представление практически любого письменного языка. Эта возможность важна для интернационализации и особенно для программистов, не говорящих на английском языке. Американские и другие англоговорящие программисты обычно пишут программы с помощью текстового редактора, поддерживающего только кодировки ASCII или Latin1, и потому у них нет простого доступа к полному набору символов Unicode. Однако никаких трудностей это не порождает, поскольку кодировки ASCII и Latin1 представляют собой подмножества Unicode, и любая javascriptпрограмма, написанная с помощью этих наборов символов, абсолютно корректна. Программисты, привыкшие рассматривать символы как 8разрядные значения, могут быть сбиты с толку, узнав, что javascript представляет каждый символ с помощью двух байтов, однако на самом деле для программиста это обстоятельство остается незаметным и может просто игнорироваться. Стандарт ECMAScript v3 допускает наличие Unicodeсимволов в любом месте javascriptпрограммы. Однако версии 1 и 2 стандарта допускают использование Unicodeсимволов только в комментариях и строковых литералах, заключенных в кавычки, все остальные составляющие программы ограничены набором ASCIIсимволов.1 Версии javascript, предшествующие стандарту ECMAScript, обычно вообще не поддерживают Unicode.
2.2. Чувствительность к регистру
javascript – это язык, чувствительный к регистру. Это значит, что ключевые слова, переменные, имена функций и любые другие идентификаторы языка должны всегда содержать одинаковые наборы прописных и строчных букв. Например, ключевое слово while должно набираться как «while», а не «While» или «WHILE». Аналогично online, Online, OnLine и ONLINE – это имена четырех разных переменных. Заметим, однако, что язык HTML, в отличие от javascript, не чувствителен к регистру. По причине близкой связи HTML и клиентского javascript это различие может привести к путанице. Многие javascriptобъекты и их свойства имеют теже имена, что и теги и атрибуты языка HTML, которые они обозначают. Если в HTML эти теги и атрибуты могут набираться в любом регистре, то в javascript они обычно должны набираться строчными буквами. Например, атрибут обработчика события onclick чаще всего задается в HTML как onclick, однако в javascriptкоде (или в XHTMLдокументе) он должен быть обозначен как onclick.
2.3. Символыразделители и переводы строк
javascript игнорирует пробелы, табуляции и переводы строк, присутствующие между лексемами в программе. Поэтому символы пробела, табуляции и перевода строки могут без ограничений использоваться в исходных текстах программ для форматирования и придания им удобочитаемого внешнего вида. Однако имеется небольшое ограничение, которое касается символов перевода строк и о котором рассказывается в следующем разделе.
2.4. Необязательные точки с запятой
Простые javascriptинструкции обычно завершаются символами точки с запятой (;), как в C, C++ и Java. Точка с запятой служит для отделения инструкций друг от друга. Однако в javascript точку с запятой можно не ставить, если каждая инструкция помещается в отдельной строке. Например, следующий фрагмент может быть записан без точек с запятой:
a = 3;
b = 4;
Для русскоязычных программистов это означает, что а) русскоязычный текст может появляться только в комментариях и в строковых литералах, предназначенных непосредственно для вывода; б) такие тексты представляются в кодировке UTF16 (Unicode – это единая система связывания символов любого языка с однозначным численным кодом, а для кодирования этого численного кода могут применяться различные кодировки, например UTF8, UTF16 и др.); в) все остальные лексемы программы – операторы, имена переменных и т. д. – должны состоять из латинских литер; это достаточно обычная и привычная практика и для других языков программирования.
Однако если обе инструкции расположены в одной строке, то первая точка с запятой должна присутствовать обязательно:
a = 3; b = 4;
Пропуск точек с запятой нельзя признать правильной практикой программирования, и поэтому желательно выработать привычку их использовать. Теоретически javascript допускает переводы строк между любыми двумя лексемами, но привычка синтаксического анализатора javascript автоматически вставлять точки с запятой за программиста приводит к некоторым исключениям из этого правила. Если в результате разделения строки программного кода та ее часть, которая предшествует символу перевода, оказывается законченной инструкцией, синтаксический анализатор javascript может решить, что точка с запятой пропущена случайно, и вставить ее, изменив смысл программы. К подобным требующим внимания ситуациям относятся, среди прочих, инструкции return, break и continue. Рассмотрим, например, следующий фрагмент:
return
true;
Синтаксический анализатор javascript предполагает, что программист имеет в виду следующее:
return;
true;
Хотя на самом деле программист, видимо, хотел написать:
return true;
Вот случай, когда следует быть внимательным, – данный код не вызовет синтаксической ошибки, но приведет к неочевидному сбою. Похожая неприятность возникает, если написать:
break
outerloop;
javascript вставляет точку с запятой после ключевого слова break, что вызывает синтаксическую ошибку при попытке интерпретировать следующую строку. По аналогичным причинам постфиксные операторы ++ и должны располагаться в той же строке, что и выражения, к которым они относятся.
2.5. Комментарии
javascript, как и Java, поддерживает комментарии и в стиле C++, и в стиле C. Любой текст, присутствующий между символами // и концом строки, рассматривается как комментарий и игнорируется javascript. Любой текст между символами /* и */ также рассматривается как комментарий. Эти комментарии в стиле C могут состоять из нескольких строк и не могут быть вложенными. Следующие строки кода представляют собой корректные javascriptкомментарии:
// Это однострочный комментарий.
/* Это тоже комментарий */ // а это другой комментарий.
/*
* Это еще один комментарий.
* Он располагается в нескольких строках.
*/
2.6. Литералы
Литерал – это значение, указанное непосредственно в тексте программы. Ниже приведены примеры литералов:
12 // Число двенадцать
1.2 // Число одна целая две десятых
"hello world" // Строка текста
'Hi' // Другая строка
true // Логическое значение
false // Другое логическое значение
/javascript/gi // Регулярное выражение (для поиска по шаблону)
null // Отсутствие объекта
В ECMAScript v3 также поддерживаются выражения, которые могут служить в качестве массивовлитералов и объектовлитералов. Например:
{ x:1, y:2 } // Инициализатор объекта
[1,2,3,4,5] // Инициализатор массива
Литералы – важная часть любого языка программирования, поскольку написать программу без них невозможно.
2.7. Идентификаторы
Идентификатор – это просто имя. В javascript идентификаторы выступают в качестве названий переменных и функций, а также меток некоторых циклов. Правила формирования допустимых идентификаторов совпадают с правилами Java и многих других языков программирования. Первым символом должна быть буква, символ подчеркивания (_) или знак доллара ($).1 Последующие символы могут быть любой буквой, цифрой, символом подчеркивания или знаком доллара. (Цифра не может быть первым символом, т. к. тогда интерпретатору труднее отличать идентификаторы от чисел.) Примеры допустимых идентификаторов:
i
my_variable_name
v13
_dummy
$str
В ECMAScript v3 идентификаторы могут содержать буквы и цифры из полного набора символов Unicode. До этой версии стандарта javascriptидентификаторы
были ограничены набором ASCII. ECMAScript v3 также допускает наличие в идентификаторах escapeпоследовательностей Unicode – символов \u, за которыми расположены 4 шестнадцатеричные цифры, обозначающие 16разрядный код символа. Например, идентификатор π можно записать как \u03c0. Этот синтаксис неудобен, но обеспечивает возможность транслитерации javascriptпрограмм с Unicodeсимволами в форму, допускающую работу с ними в текстовых редакторах и других средствах, не поддерживающих полный набор Unicode. Наконец, идентификаторы не могут совпадать ни с одним из ключевых слов, предназначенных в javascript для других целей. В следующем разделе перечислены ключевые слова, зарезервированные для специальных нужд javascript.
2.8. Зарезервированные слова
В javascript имеется несколько зарезервированных слов. Они не могут быть идентификаторами (именами переменных, функций и меток циклов) в javascriptпрограммах. В табл. 2.1 перечислены ключевые слова, стандартизованные в ECMAScript v3. Для интерпретатора javascript они имеют специальное значение, т. к. являются частью синтаксиса языка.
Таблица 2.1. Зарезервированные ключевые слова javascript
break | do | if | switch | typeof |
case | else | in | this | var |
catch | false | instanceof | throw | void |
continue | finally | new | true | while |
default | for | null | try | with |
delete | function | return |
В табл. 2.2 перечислены другие ключевые слова. В настоящее время они в JavaScript не используются, но зарезервированы ECMAScript v3 в качестве возможных будущих расширений языка.
Таблица 2.2. Слова, зарезервированные для расширений ECMA
abstract | double | goto | native | static |
Boolean | enum | implements | package | super |
byte | export | import | private | synchronized |
char | extends | int | protected | throws |
class | final | interface | public | transient |
const | float | long | short | volatile |
debugger |
Помимо нескольких только что перечисленных формально зарезервированных слов текущие проекты стандарта ECMAScript v4 рассматривают применение ключевых слов as, is, namespace и use. Хотя текущие интерпретаторы javascript не запрещают использование этих четырех слов в качестве идентификаторов, однако все равно следует этого избегать.
Кроме того, следует избегать использования идентификаторов глобальных переменных и функций, предопределенных в языке javascript. Если попытаться создать переменную или функцию с таким идентификатором, то это будет приводить либо к ошибке (если свойство определено как доступное только для чтения), либо к переопределению глобальной переменной или функции, чего точно не стоит делать, если вы не стремитесь к этому преднамеренно. В табл. 2.3 перечислены имена глобальных переменных и функций, определяемых стандартом ECMAScript v 3. Конкретные реализации могут содержать свои предопределенные элементы с глобальной областью видимости, кроме того, каждая конкретная платформа javascript (клиентская, серверная и прочие) может еще больше расширять этот список.
Таблица 2.3. Другие идентификаторы, которых стоит избегать
arguments | encodeURI | Infinity | Object | String |
Array | Error | isFinite | parseFloat | SyntaxError |
Boolean | escape | isNaN | parseInt | TypeError |
Date | eval | Math | RangeError | undefined |
decodeURI | EvalError | NaN | ReferenceError | unescape |
decodeURIcomponent | Function | Number | RegExp | RegExp |
Переменные
Переменная – это область памяти компьютера, предназначенная для хранения данных. Переменные в JavaScript используют для хранения различных данных, например дату, какое-то числовое значение и др.
Для использования переменной ее для начала нужно объявить, присвоить ей какое-либо значение и только после этого ее можно будет использовать в сценарии.
Объявление
Для объявления переменной в JavaScript используется ключевое слово var, за которым следует имя новой переменной:
var peremen_1
где peremen_1 – имя переменной.
Можно так же одной строкой объявлять несколько переменных, имена которых разделяют запятыми:
var peremen_1, peremen_2
Присвоение переменным значений
После объявления переменной ей нужно присвоить значение. Присвоить значение переменной можно в любом месте сценария или же сразу после объявления. Например:
var peremen_1 = 10
Следует заметить что, в сценарии значения переменных неоднократно можно менять.
Использование переменных
После объявления и присвоения значений переменные можно использовать в сценарии. Вот простой пример:
<script language="JavaScript" type="text/javascript">
<!--
var param_1 = 5
var param_2 = 10
var summa = param_1 + param_2
alert(summa)
//-->
</script>
В этом примере сначала мы объявили две переменные и сразу присвоили им значения. Потом мы объявили переменную summa, а в качестве значения мы присвоили сумму первых двух переменных. Потом с помощью функции alert() мы отображаем на экране значение переменной summa.
Правила присвоения имен переменным:
- имя переменной может содержать только буквы, цифры или знак нижнего подчеркивания, использование других символов запрещается первым символом должна быть буква или знак нижнего подчеркивания имена переменных чувствительны к регистру символов не допускается использование в качестве имен переменных зарезервированные слова JavaScript количество символов в именах переменных не ограничивается
Выражения
Выражение - любой имеющий силу набор литералов, переменных, операторов, и выражений, которые вычисляю простое значение. Значение может быть число, строка, или логическое значение. Существует два типа выражений: которые присваивают значение переменной, и которые вычисляют выражение без присваивания его переменной. Например, выражение
x = 7
Является выражением, которое приписывает x значение 7. Это выражение вычисляет 7. Такие выражения используют операторы присвоения. С другой стороны, выражение
3 + 4
Просто вычисляет 7; оно не выполняет присвоения. Операторы используемые в таких выражениях, упоминаются просто как операторы.
JavaScript имеет следующие выражения:
- Арифметические: например, вычисляет число Строковые: вычисляют строку символов, например "Джон" или "234" Логические: вычисляют true(истина) или false(ложь)
Язык JavaScript включает в себя значение null для переменных, которым не присвоено никакое значение. Любая попытка использовать переменную, имеющую значение null, в вычисляемом выражении приводит к ошибке, за исключением случая присваивания значения null переменной, например timerID = null.
Операторы
JavaScript имеет арифметические, строковые и логические операторы. Имеет, и бинарные и унарные операторы. Бинарный оператор требует двух операндов, унарный перед оператором и одним после оператора:
Operand1 operator operand2
Например, 3 + 4 or x * y
Унарный оператор требует одного операнда, до или после оператора:
operator operand
Или
operand operator
Например x ++ или ++ x.
Арифметические Операторы
Арифметические операторы принимают численные значения (литералы или переменные) как их операнды и возвращают числовое значение.
Стандартные Арифметические Операторы
Арифметические операторы - сложение (+), вычитание (-), умножение (*), и деление (/). Эти операторы работают стандартным способом.
Модуль (%)
Оператор модуля используется следующим образом:
Var1 % var2
Оператор модуля возвращает первый операнд по модулю второго операнд, то есть var1 по модулю var2, где var1 и var2 - переменные. Функция по модулю - это остаточный член от деления var1 на var2. Например, 12 % 5 возвращается 2.
Инкремент (++)
Оператор инкремент используется следующим образом:
var++ или ++var
Этот оператор увеличивает его операнд и возвращает значение. Если используемый постфикс, с оператором после операнда (например x ++), то возвращает значение перед увеличением. Если используемый префикс с оператором перед операндом (например, ++ x), то возвращает значение после увеличения.
Например, если x - 3, то утверждение
y = x ++
Увеличивает x до 4 и присваивает y равное 3.
Если x - 3, то утверждение
y = ++ x
Увеличивает x до 4 и присваивает y равное 4.
Декремент (--)
Оператор декремента используется следующим образом:
var-- или --var
Этот оператор уменьшает его операнд и возвращает значение. Если используемый постфикс (например x--) то возвращает значение перед уменьшением. Если используемый префикс (например, --x), то возвращает значение после уменьшения.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |


