Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 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