Клиентский JavaScript 1.3

         

Булевы литералы


Тип Boolean имеет два литеральных значения: true и false.

Не путайте Булевы значения true и false со значениями true и false объекта Boolean. Объект Boolean является оболочкой для примитивного типа данных Boolean. См. "Объект Boolean".



Целые числа


Целые числа могут быть десятеричными (база 10), 16-ричными (база 16) и 8-ричными (база 8). Десятеричный целочисленный литерал состоит из последовательности цифр без ведущего нуля (0). Ведущий 0 (нуль) в целочисленном литерале означает, что это восьмеричное число; ведущие символы 0x (или 0X) указывают, то это 16-ричное число.
16-ричные цифры могут состоять из цифр (0-9) и английских букв a-f и A-F. Восьмеричные целые могут состоять только из цифр 0-7.

Вот примеры целочисленных литералов: 42, 0xFFF, -345.



Escape-последовательности unicode


Вы можете использовать escape-последовательности (замены) Unicode в строковых литералах. Такая escape-последовательность состоит из шести ASCII-символов: \u и четырёх 16-ричных цифр. Например, \u00A9 это символ copyright. Каждая escape-последовательность Unicode в JavaScript интерпретируется как одиночный символ.

Следующий код возвращает символ copyright и строку "Netscape Communications".

x="\u00A9 Netscape Communications"

В таблице перечислены часто используемые специальные символы и их Unicode-значения.



Значения, переменные и литералы


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

В главе имеются следующие разделы:

Значения ПеременныеЛитералы Unicode



Использование специальных символов в строках


Помимо обычных символов, Вы можете также включать в строки специальные символы, как показано в следующем примере.

"одна строка \n другая строка"

В таблице перечислены специальные символы, которые Вы можете использовать в строках JavaScript.



Конвертация типов данных


JavaScript это динамически типизированный язык. Это означает, что Вы не должны специфицировать тип данных переменной при её объявлении и что типы данных при необходимости автоматически конвертируются при выполнении скрипта. Так, например, Вы можете объявить переменную:

var answer = 42

и позднее присвоить этой же переменной строковое значение, например,

answer = "Thanks for all the fish..."

Поскольку JavaScript динамически типизируется, такое присвоение не вызовет сообщения об ошибке.

В выражениях, содержащих числовые и строковые значения и операцию +, JavaScript конвертирует числа в строки. Например, рассмотрим такой оператор:

x = "The answer is " + 42 // возвращает "The answer is 42"
y = 42 + " is the answer" // возвращает "42 is the answer"

В операторах, содержащих другие операции, JavaScript не конвертирует числа в строки. Например:

"37" - 7 // возвращает 30
"37" + 7 // возвращает 377



Лишние запятые в литералах массива


Вы не должны специфицировать все элементы в литерале массива. Если Вы поместите подряд две запятые, создаётся массив с пробелами для неспецифицированных значений. В следующем примере создаётся массив fish:

fish = ["Lion", , "Angel"]

В это массиве имеются два элемента со значениями и один пустой элемент (fish[0] равен "Lion", fish[1] равен undefined, fish[2] равен "Angel"):

Если Вы вставили ведомую запятую в конце списка элементов, эта запятая игнорируется. В следующем примере размер массива равен 3. Элемента myList[3] нет. Все остальные запятые в списке обозначают новый элемент.

myList = ['home', , 'school', ];

В следующем примере размер массива равен 4, а элемент myList[0] отсутствует.

myList = [ , 'home', , 'school'];

В следующем примере размер массива равен 4, а элемент myList[3] отсутствует. Игнорируется только последняя запятая. Эта ведомая запятая не обязательна.

myList = ['home', , 'school', , ];



Литералы


Литералы используются в JavaScript для представления значений. Это фиксированные значения, не переменные, которые Вы литерально\буквально предоставляете скрипту.
В этом разделе описаны следующие типы литералов:

Литералы массива Булевы литералы Литералы с плавающей точкойЦелые числа Литералы объектаСтроковые литералы



Литералы массива


Литерал массива это список из 0 или более выражений, каждое из которых представляет элемент массива, заключённый в квадратные скобки ([]). Если Вы создаёте массив с использованием литерала массива, он инициализируется специфицированными значениями в качестве элементов и получает размер, равный количеству специфицированных аргументов.

В этом примере создаётся массив coffees из трёх элементов, имеющий размер 3:

coffees = ["French Roast", "Columbian", "Kona"]

ПРИМЕЧАНИЕ: Литерал массива это тип инициализатора объекта. См. "Использование Инициализаторов Объектов".

Если массив создаётся путём использования литерала в скрипте верхнего уровня, JavaScript интерпретирует массив каждый раз, когда вычисляет выражение, содержащее литерал массива. Кроме того, используемый в функции литерал создаётся каждый раз при вызове функции.

Литералы массива являются также Array-объектами. См. в разделе "Объект Array" детальную информацию об объектах Array.



Литералы объекта


Литерал объекта это список из 0 или более пар из имён свойств объекта и их значений, заключённый в фигурные скобки ({}). Вы не должны использовать литерал объекта в начале оператора. Это приведёт к ошибке.

Далее идёт пример литерала объекта. Первый элемент объекта car определяет свойство myCar; второй элемент, свойство getCar, вызывает функцию (Cars("honda")); третий элемент, свойство special, использует существующую переменную (Sales).

var Sales = "Toyota";function CarTypes(name) {
if(name == "Honda")
      return name;
   else
      return "Sorry, we don't sell " + name + ".";
}car = {myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales}document.write(car.myCar); // Saturn
document.write(car.getCar); // Honda
document.write(car.special); // Toyota

Кроме того, Вы можете использовать индексирование объекта, свойство index (например, 7), или вкладывать объекты друг в друга. В следующем примере используются эти возможности, однако они могут не поддерживаться другими браузерами, совместимыми с ECMA.

car = {manyCars: {a: "Saab", b: "Jeep"}, 7: "Mazda"}document.write(car.manyCars.b); // Jeep
document.write(car[7]); // Mazda



Литералы с плавающей точкой


Литерал с плавающей точкой может иметь следующие составные части:

десятеричное целоедесятичная точка (".") дробная часть (другое 10-ричное число)экспонента

Часть "экспонента" это английская буква "e" или "E" с последующим целым числом, которое может иметь знак (предшествующий "+" или "-"). Литерал с плавающей точкой обязан иметь как минимум одну цифру и десятичную точку, либо "e" (или "E").

Вот некоторые примеры литералов с плавающей точкой: 3.1415, -3.1E12, .1e12, 2E-12



Область видимости переменной


Если Вы устанавливаете идентификатор переменной путём присвоения вне функции, такая переменная называется глобальной, поскольку доступна в любом месте документа. Если Вы объявляете переменную внутри функции, она называется локальной переменной, поскольку доступна только внутри данной функции.

Использование var при объявлении глобальной переменной не требуется. Однако Вы обязаны использовать var при объявлении переменой внутри функции.

Вы можете получить доступ к глобальным переменным, объявленным в одном окне или фрэйме, из другого окна или фрэйма, специфицируя имя окна или фрэйма. Например, если переменная phoneNumber объявляется в документе FRAMESET, Вы можете обратиться к этой переменной из дочернего фрэйма так: parent.phoneNumber.



Объявление переменных


Вы может объявить переменную двумя способами:

Просто присвоив ей значение. Например, x = 42 С помощью ключевого слова var. Например, var x = 42



Отображение символов с помощью unicode


Вы можете использовать Unicode для отображения символов из разных языков или технических символов. Для правильного отображения символов клиент, такой как Netscape Navigator 4.x, должен поддерживать Unicode. Кроме того, клиенту должен быть доступен подходящий шрифт Unicode, а клиентская платформа обязана поддерживать Unicode. Часто шрифты Unicode не отображают все символы Unicode. Некоторые платформы, такие как Windows 95, предоставляют частичную поддержку Unicode.

Для получения ввода не-ASCII символами, клиент должен высылать ввод как Unicode. Используя стандартную расширенную клавиатуру, клиент не может легко ввести дополнительные символы, поддерживаемые Unicode. Часто единственным способом ввести символы Unicode является использование escape-последовательностей Unicode. Спецификация Unicode, однако, не требует использования escape-последовательностей. Unicode имеет метод для отображения специальных символов Unicode через использование составного символа. Он специфицирует порядок символов, который может использоваться для создания составного символа, где сначала идёт базовый символ, а затем один или более непробельных знаков. Обычные реализации Unicode, включая реализацию JavaScript, однако, не поддерживают эту опцию. JavaScript не пытается представить комбинированные последовательности Unicode. Другими словами, ввод a и ' не даст à. JavaScript интерпретирует a' как два различных 16-битных символа Unicode. Вы обязаны использовать escape-последовательности Unicode или литеральный символ Unicode для отображения символа à.

Дополнительно о Unicode см. Web-сайт консорциума Unicode Consortium и The Unicode Standard, Version 2.0, опубликованный Addison-Wesley, 1996.



Переменные


Вы используете переменные как символические имена для значений. Вы даёте переменной имя, по которому Вы ссылаетесь на неё и которое обязано соответствовать определённым требованиям.

Идентификатор в JavaScript, или name\имя, обязан начинаться с буквы или символа подчёркивания ("_"); последующие символы также могут быть цифрами (0-9). Поскольку JavaScript чувствителен к регистру символов, могут использоваться буквы (английские) от "A" до "Z" (верхний регистр) и от "a" до "z" (нижний регистр).

Вот некоторые примеры правильных имён: Number_hits, temp99, _name.



Совместимость unicode с ascii и iso


Unicode совместим с символами ASCII и поддерживается многими программами. Первые 128 символов Unicode соответствуют символам ASCII и имеют те же байтовые значения. Символы Unicode с U+0020 по U+007E эквивалентны символам ASCII с 0x20 по 0x7E. В отличие от ASCII, который поддерживает латинский алфавит и использует набор 7-битных символов, Unicode использует 16-битное значение для каждого символа. Это позволяет кодировать десятки тысяч символов. Unicode версии 2.0 содержит 38 885 символов. Он также поддерживает механизм расширения, Transformation Format (UTF), называемый UTF-16, который позволяет кодировать более миллиона символов путём использования 16-битных пар. UTF включает кодирование в реальные биты.

Unicode полностью совместим с International Standard ISO/IEC 10646-1; 1993, который является поднабором ISO 10646, и поддерживает ISO UCS-2 (Universal Character Set), который использует два восьмеричных значения (два байта или 16 битов).

Поддержка Unicode в JavaScript и в Navigator'е означает, что Вы можете использовать в программах на JavaScript не-латинские, международные и локализованные символы, плюс специальные технические символы. Unicode является стандартным способом кодирования многоязычных текстов. Поскольку Unicode совместим с ASCII, программы могут использовать ASCII-символы. Вы можете использовать не-ASCII символы Unicode в комментариях и строковых литералах JavaScript.



Строковые литералы


Строковой литерал это 0 или более символов, заключённых в двойные (") или одинарные (') кавычки. Строка должна быть ограничена кавычками одного вида; то есть, оба знака должны быть " или '. Вот примеры строковых литералов:

"blah"

'blah'

"1234"

"первая строка \n вторая строка"

Вы можете вызвать любые методы объекта String в строковом литеральном значении - JavaScript автоматически конвертирует строковой литерал во временный String-объект, вызывает его методы, затем уничтожает временный String-объект. Вы можете также использовать свойство String.length со строковыми литералами.

Вы должны использовать строковые литералы, если только Вам не нужно специально использовать объект String. См. также "Объект String".



специальные символы javascript


СимволЗначение
\b Backspace
\f Form feed/прогон страницы
\n New line/новая строка
\r Carriage return/возврат каретки
\t Tab/табуляция
\' Апостроф или одинарная кавычка
\"Двойная кавычка

\\Обратный слэш (\)

\XXX Символ из набора Latin-1, специфицированный тремя восьмеричными цифрами XXX в диапазоне от 0 до 377. Например, \251 это восьмеричная последовательность для символа copyright.

\xXX Символ из набора Latin-1, специфицированный двумя 16-ричными цифрами XX в диапазоне от 00 до FF. Например, \xA9 это 16-ричная последовательность для символа copyright.

\uXXXX Символ Unicode, специфицированный четырьмя 16-ричными цифрами XXXX. Например, \u00A9 это Unicode-последовательность для символа copyright. См. также  "Escape-последовательности Unicode".



unicode-значения специальных символов


КатегорияUnicode-значение ИмяFormat-имя
Пробельные символы\u0009 Tab/табуляция<TAB>
\u000BVertical Tab/вертикальная табуляция <VT>
\u000C Form Feed/прогон страницы<FF>
\u0020Space/пробел <SP>
Терминаторы строки \u000ALine Feed/прогон строки<LF>

\u000D Carriage Return/возврат каретки<CR>
Дополнительные escape-последовательности Unicode\u000b Backspace<BS>
\u0009Horizontal Tab/горизонтальная табуляция <HT>
\u0022 Double Quote/двойная кавычка"
\u0027Single Quote/одинарная кавычка '
\u005C Backslash/обратный слэш\

JavaScript использует escape-последовательности Unicode иначе, чем Java. В JavaScript escape-последовательность никогда сначала не интерпретируется как специальный символ. Например, последовательность терминатора строки внутри строки не обрывает строку до того как будет интерпретирована функцией. JavaScript игнорирует любую escape-последовательность внутри комментария. В Java, если escape-последовательность используется в однострочном комментарии, она интерпретируется как символ Unicode. Для строкового литерала, компилятор Java сначала интерпретирует escape-последовательности. Например, если escape-символ обрыва строки (\u000A) используется в Java, он обрывает строковой литерал. В Java это приводит к ошибке, поскольку терминаторы строки не допускаются в строковых литералах. Вы обязаны использовать \n для line feed в строковом литерале. В JavaScript эта escape-последовательность работает так же, как \n.



Unicode


Unicode это универсальный стандарт кодирования символов для обмена и отображения символов основных письменных языков. Он покрывает языки Америки, Европы, Среднего Востока, Африки, Индии, Азии и Океании, а также мёртвые языки и технические символы. Unicode даёт возможность передавать, обрабатывать и отображать многоязычные тексты, а также использовать общепринятые математические и технические символы. Таким образом предполагается разрешить проблемы интернационализации в многоязычной компьютерной среде, такие как различные национальные символьные стандарты. Не все современные и архаичные виды письма, однако, поддерживаются в настоящее время.

Набор символов Unicode можно использовать для всех известных кодировок. Unicode смоделирован после набора ASCII (American Standard Code for Information Interchange). В нём используется числовое значение и имя для каждого символа. Кодировка символов специфицирует идентификацию символа и числовое значение (кодовую позицию), а также битовое представление этого значения. 16-битное числовое значение (кодовое значение) определяется 16-ричным числом и префиксом U, например, U+0041 представляет букву A. Уникальное имя для этого символа - LATIN CAPITAL LETTER A.

Версии JavaScript до 1.3. Unicode не поддерживается в версиях, более ранних, чем JavaScript 1.3.



Вычисление переменных


Переменная или элемент массива, которым не присвоено значение, имеют значение undefined. Результат вычисления переменной, не имеющей присвоенного значения зависит от того, как она была объявлена:

Если переменная без присвоенного значения была объявлена без использования var, вычисление приведёт к ошибке времени выполнения/runtime error. Если переменная без присвоенного значения была объявлена с использованием var, вычисление даст значение undefined, или NaN - в числовом контексте.

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

function f1() {
   return y - 2;
}
f1() //Вызывает ошибку времени выполненияfunction f2() {
   return var y - 2;
}
f2() //возвращает NaN

Можно использовать undefined, чтобы определить, имеет ли переменная значение. В следующем коде переменной input не присвоено значение, и оператор if вычисляется в true.

var input;
if(input === undefined){
   doThis();
} else {
   doThat();
}

Значение undefined ведёт себя как false при использовании в качестве Булева значения. Например, следующий код выполняет функцию myFunction, поскольку элемент массива не определён:

myArray=new Array()
if (!myArray[0])
   myFunction()

Если вычисляется переменная со значением null, то значение null работает как 0 в числовом контексте и как false - в Булевом контексте. Например:

var n = null
n * 32 //возвращает 0



Замена символов/escaping


Для символов, не указанных в Таблице 2.1, предшествующий backslash игнорируется, за исключением знака кавычки и самого символа backslash (\).

Вы можете вставить знак кавычки внутри строки, введя перед ним backslash. Это известно как escaping\замена знака кавычки. Например,

var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service."
document.write(quote)

В результате будет выведено:

He read "The Cremation of Sam McGee" by R.W. Service.

Для включения в строку литерального backslash Вы обязаны escape-ировать backslash. Например, для присвоения строке пути к файлу c:\temp запишите так:

var home = "c:\\temp"



Значения


JavaScript распознаёт следующие типы значений:

Числа, такие как 42 или 3.14159 Логические (Булевы) значения, это true или false Строки, такие как "Howdy!" null, специальное ключевое слово, обозначающее значение null; null является также примитивным значением. Поскольку JavaScript учитывает регистр символов, null это не то же самое, что Null, NULL или иной вариант. undefined, свойство верхнего уровня/top-level, значением которого является undefined; undefined также является примитивным значением.

Этот сравнительно небольшой набор типов значений, или типов данных, даёт Вашим приложениям возможность выполнять различные функции. Отсутствует явное различие между целыми и реальными числами. Нет также типа данных date. Однако Вы может использовать объект Date и его методы для работы с датами.

Объекты и функции также являются основными элементами языка. Можно считать объекты именованными контейнерами значений, а функции - процедурами, которые Ваше приложение выполняет.