Что такое JavaScript?
JavaScript это разработанный корпорацией Netscape межплатформенный объектно-ориентированный язык скриптинга (сценариев). Ядро JavaScript содержит набор основных объектов, таких как Array, Date и Math, и основной набор элементов языка, таких как операции, управляющие структуры и операторы. Ядро JavaScript может быть расширено путём предоставления дополнительных объектов; например:
Клиентский JavaScript расширяет ядро языка за счёт объектов, управляющих браузером (Navigator или другой подобный web-браузер) и его Document Object Model (DOM). Например, клиентские расширения позволяют приложению размещать элементы на HTML-форме и отвечать на пользовательские события, такие как щелчок мышью, ввод данных в форму и навигация по страницам.
Серверный JavaScript расширяет ядро языка за счёт объектов, имеющих отношение к работе JavaScript на сервере. Например, серверные расширения позволяют подключиться к реляционной БД, поддерживать непрерывность информации между вызовами приложения или работать с файлами на сервере.
JavaScript даёт Вам возможность создавать приложения, работающие в Internet. Клиентские приложения работают в браузере, таком как Netscape Navigator, а серверные приложения запускаются на сервере, таком как Netscape Enterprise Server. Используя JavaScript, Вы можете создавать динамические HTML-страницы, которые обрабатывают пользовательский ввод и работают с данными через использование специальных объектов, файлов и реляционных баз данных.
С помощью функциональности LiveConnect Вы можете дать возможность коду Java и JavaScript взаимодействовать. Из JavaScript Вы можете инстанциировать Java-объекты и получить доступ к их public-методам и полям. Из Java Вы можете иметь доступ к объекта, методам и свойствам JavaScript.
Netscape изобрела JavaScript, и JavaScript впервые был использован в браузерах Netscape.
Документация JavaScript и спецификация ECMA
Документация JavaScript и спецификация ECMA
Спецификация ECMA это набор требований по реализации ECMAScript; она может использоваться, если Вы хотите определить, поддерживается ли возможность JavaScript в ECMA. Если Вы планируете писать JavaScript-код, который использует только поддерживаемые ECMA возможности, Вам понадобится просмотреть спецификацию ECMA.
Документ ECMA не предназначен для помощи программистам скриптов; о написании скриптов см. документацию JavaScript.
JavaScript. Обзор.
Глава 1
JavaScript. Обзор.
Эта глава - введение в JavaScript. Здесь обсуждаются некоторые фундаментальные понятия.
В главе имеются следующие разделы:
Что такое JavaScript?
Ядро, клиентский и серверный JavaScript
JavaScript и Java
Отладка в JavaScript
Visual JavaScriptJavaScript и спецификация ECMA
Ядро JavaScript
Ядро JavaScript
Клиентский и серверный JavaScript имеют следующие общие элементы:
Ключевые слова
Синтаксис и грамматику операторов
Требования к выражениям, переменным и литералам
Объектную модель (хотя клиентский и серверный JavaScript имеют разные наборы предопределённых объектов)
Предопределённые объекты и функции, такие как Array, Date и Math
JavaScript и Java
JavaScript и Java похожи, но имеют фундаментальные отличия. Язык JavaScript напоминает Java, но не имеет статической типизации и строгой проверки типов Java. JavaScript в основном поддерживает синтаксис выражений Java и базовые конструкции управления потоком.
В отличие от системы времени компиляции классов Java, построенной на объявлениях, JavaScript поддерживает систему времени прогона, базирующуюся на небольшом количестве типов данных: числовых, Булевых и строковых значениях. JavaScript имеет объектную модель на основе прототипов, а не более распространённую модель на основе классов. Модель на прототипах предоставляет возможность динамического наследования; то есть то, что наследуется, может варьироваться для разных объектов. JavaScript также поддерживает функции без специальных требований к объявлению. Функции могут быть свойствами объектов, выполняясь как слабо типизированные методы.
JavaScript намного более свободен по форме по сравнению с Java. Вы не должны объявлять все переменные, классы и методы. Вы не должны учитывать, какие методы являются public, private или protected и Вы не должны реализовывать интерфейсы. Возвращаемые значения переменных, параметров и функций не являются явно типизированными.
Java это язык программирования на основе классов, созданный для быстрого выполнения и строгой проверки типов. Строгая проверка типов означает, к примеру, что Вы не можете привести/cast целое число Java к ссылке на объект или получить доступ к private-памяти, нарушив байт-коды Java. Модель классов Java означает, что программы состоят исключительно из классов и их методов. Наследование классов Java и строгая типизация обычно требуют плотно выстроенной иерархии объектов. Эти требования делают программирование на Java более сложным, чем авторизация в JavaScript.
JavaScript по духу происходит от небольших, динамически типизируемых языков, таких как HyperTalk и dBASE. Эти языки программирования являются утилитами программирования для широкой аудитории, так как имеют упрощённый синтаксис, специализированную встроенную функциональность и минимальные требования при создании объектов.
JavaScript и спецификация ECMA
Корпорация Netscape изобрела JavaScript, и JavaScript впервые был использован в Netscape-браузерах. Одновременно Netscape работает совместно с ECMA (European Computer Manufacturers Association) над созданием стандартизованного международного языка программирования на основе ядра JavaScript. ECMA это международная ассоциация стандартов для информационных и коммуникационных систем. эта стандартизованная версия JavaScript, называемая ECMAScript, работает совершенно одинаково во всех приложениях, поддерживающих данный стандарт. Компании могут использовать этот открытый стандартный язык для разработки своих реализаций JavaScript. Первая версия стандарта ECMA документирована в спецификации ECMA-262.
Стандарт ECMA-262 одобрен также ISO (International Organization for Standards) как ISO-16262. Вы можете найти PDF-версию ECMA-262 на сайте Netscape DevEdge Online. Вы можете также найти
эту спецификацию на web-сайте ECMA. Спецификация ECMA не описывает Document Object Model (DOM), которая стандартизована консорциумом World Wide Web Consortium (W3C). DOM определяет способ, которым HTML-объекты документа экспонируются Вашему скрипту.
Клиентский JavaScript
Клиентский JavaScript
Web-браузеры, такие как Navigator (2.0 и более поздние версии), могут интерпретировать операторы клиентского JavaScript, внедрённые в HTML-страницу. Если браузер (или клиент) запрашивает такую страницу, сервер высылает полное содержимое документа, включая HTML и операторы JavaScript, клиенту по сети. Браузер читает страницу сверху вниз, отображая результирующий HTML и выполняя операторы JavaScript по мере из обнаружения. Этот процесс, показанный на следующем рисунке, выдает пользователю конечный результат.
Отладка в JavaScript
JavaScript позволяет создавать сложные компьютерные программы. Как и в других языках, Вы можете ошибаться при написании скриптов. Отладчик Netscape JavaScript Debugger позволяет отлаживать Ваши скрипты. Об использовании Отладчика/Debugger см. следующие документы:
Netscape JavaScript Debugger 1.1 - введение в Debugger.
Вы можете загрузить Debugger с указанного URL. Загружаемый файл это SmartUpdate .jar. Для установки Debugger загрузите этот .jar-файл в Navigator: используйте процедуру, описанную в вышеуказанном URL, или введите URL к .jar-файлу в поле location (адресную строку).
Getting Started with Netscape JavaScript Debugger объясняет, как пользоваться Отладчиком.
Язык JavaScript
Рисунок 1.1 Язык JavaScript
![](image/lang.gif)
Следующие разделы являются введением в JavaScript на клиенте и на сервере.
Клиентский JavaScript
Рисунок 1.2 Клиентский JavaScript
![](image/csrt.gif)
Операторы клиентского JavaScript, внедрённые в HTML-страницу, могут реагировать на пользовательские события, такие как щелчок мыши, ввод данных в форму и навигация по странице. Например, Вы можете написать функцию JavaScript для проверки правильности введённой пользователем в форму информации - номера телефона или zip-кода. Без передачи по сети, JavaScript, внедрённый на HTML-страницу, может проверить введённые данные и вывести диалоговое окно, если пользователь ввёл неправильные данные.
Разные версии JavaScript работают с конкретными версиями Navigator'а. Например, JavaScript 1.2 предназначен для Navigator 4.0. Некоторые возможности JavaScript 1.2 недоступны в JavaScript 1.1 и, следовательно, недоступны в Navigator 3.0. О версиях JavaScript и Navigator см. "Версии JavaScript".
Серверный JavaScript в процессе разработки
Рисунок 1.3 Серверный JavaScript в процессе разработки
![](image/ssdev.gif)
На втором этапе, показанном на Рисунке 1.4, страница приложения запрашивается клиентским браузером. Машина выполнения использует исполняемый файл приложения для поиска исходной страницы и динамически генерирует возвращаемую клиенту HTML-страницу. Машина запускает на выполнение операторы серверного JavaScript, найденные на странице. В результате этого на HTML-страницу могут быть добавлены новый HTML или операторы JavaScript. Машина выполнения высылает результирующую страницу по сети Navigator'у-клиенту, который запускает на выполнение клиентский JavaScript и выводит результаты.
Серверный JavaScript на этапе прогона
Рисунок 1.4 Серверный JavaScript на этапе прогона
![](image/ssrt.gif)
В отличие от стандартных программ Common Gateway Interface (CGI), весь исходный JavaScript интегрируется непосредственно в HTML-страницы, ускоряя разработку и облегчая обслуживание. Служба Session Management Service серверного JavaScript содержит объекты, которые Вы можете использовать для обслуживания данных, существующих в промежутке между клиентскими запросами, нескольких клиентов и нескольких приложений. Служба LiveWire Database Service серверного JavaScript предоставляет объекты для доступа к БД, являясь интерфейсом для Structured Query Language (SQL)-серверов БД.
Серверный JavaScript
Серверный JavaScript
Серверный JavaScript также встраивается в HTML-страницы. Серверные операторы могут подключать к реляционным БД разных производителей, предоставлять информацию в совместное использование несколькими потребителями, давать доступ к файловой системе сервера или взаимодействовать с другими приложениями через LiveConnect и Java. HTML-страницы с серверным JavaScript могут также содержать клиентский JavaScript.
В отличие от страниц, написанных на чисто клиентском JavaScript, HTML-страницы с серверным JavaScript компилируются в байт-код исполняемых файлов. Эти исполняемые файлы запускаются web-сервером, имеющим машину выполнения JavaScript. Поэтому создание приложений JavaScript это процесс из двух этапов.
На первом этапе, показанном на Рисунке 1.3, Вы создаёте HTML-страницы (которые могут содержать операторы клиентского и серверного JavaScript) и JavaScript-файлы. Затем Вы компилируете все эти файлы в единый исполняемый файл.
Соотношение версий JavaScript и ECMA
Соотношение версий JavaScript и ECMA
Netscape тесно сотрудничает с ECMA для создания ECMA-спецификации. В таблице показано соотношение между версиями JavaScript и ECMA.
JavaScript в сравнении с Java
Таблица 1.1 JavaScript в сравнении с Java
Интерпретируется (не компилируется) клиентом. | Скомпилированные байт-коды загружаются с сервера, выполняются на клиенте. | ||
Объектно-ориентированный. Нет отличий в типах объектов. Наследование идёт через механизм прототипов, а свойства и методы могут динамически добавляться к любому объекту. | На основе классов. Объекты делятся на классы и экземпляры с наследованием по всей цепи иерархии классов. Классы и экземпляры не могут иметь свойства или методы, добавляемые динамически. | ||
Код, интегрированный с и внедрённый в HTML. | Аплеты отличаются от HTML (при доступе из HTML-страниц). | ||
Тип данных переменной не объявляется (динамическая типизация). | Тип данных переменной обязан быть объявлен (статическая типизация). | ||
Не может автоматически записывать на жёсткий диск. | Не может автоматически записывать на жёсткий диск. |
Об отличиях JavaScript и Java см. также Главу 8 "Объектная Модель. Детали".
Версии JavaScript и ECMA
Таблица 1.2 Версии JavaScript и ECMA
JavaScript 1.1 | ECMA-262 основан на JavaScript 1.1. | ||
JavaScript 1.2 | Работа над ECMA-262 не была завершена в момент выхода JavaScript 1.2. JavaScript 1.2 не полностью совместим с ECMA-262 по следующим причинам: Netscape разработал дополнения для JavaScript 1.2, которые не были учтены в ECMA-262. ECMA-262 добавил интернационализацию с использованием Unicode и универсальное поведение на всех платформах. Серверные возможности JavaScript 1.2, такие как объект Date, были платформозависимыми и использовали поведение, специфическое для конкретных платформ. | ||
JavaScript 1.3 | JavaScript 1.3 полностью совместим с ECMA-262.
В JavaScript 1.3 устранено несоответствие JavaScript 1.2 с ECMA-262 при сохранении всех дополнительных возможностей JavaScript 1.2, исключая == и !=, которые были изменены для обеспечения соответствия ECMA-262. Эти дополнительные возможности, включая некоторые новые из JavaScript 1.3, не являющиеся частью ECMA, рассматриваются при создании второй версии спецификации ECMA. Например, JavaScript 1.2 и 1.3 поддерживают регулярные выражения, которые не вошли в ECMA-262. Вторая версия спецификации ECMA не была закончена, когда JavaScript 1.3 был опубликован. |
Клиентский JavaScript. Справочник. указано, какие возможности языка совместимы с ECMA.
JavaScript всегда будет иметь возможности, не являющиеся частью спецификации ECMA; JavaScript совместим с ECMA, предоставляя дополнительные возможности.
Visual JavaScript
Netscape Visual JavaScript это утилита визуальной разработки на базе компонентов для платформы Netscape Open Network Environment (ONE). Она предназначена в основном для использования разработчиками, которые хотят создавать платформонезависимые web-приложения на основе стандартов из готовых к использованию компонентов с минимальными затратами на программирование. Эти приложения основаны на HTML, JavaScript и Java.
О Visual JavaScript см. книгу Visual JavaScript Developer's Guide.
Булевы литералы
Булевы литералы
Тип 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-последовательности (замены) Unicode в строковых литералах. Такая escape-последовательность состоит из шести ASCII-символов: \u и четырёх 16-ричных цифр. Например, \u00A9 это символ copyright. Каждая escape-последовательность Unicode в JavaScript интерпретируется как одиночный символ.
Следующий код возвращает символ copyright и строку "Netscape Communications".
x="\u00A9 Netscape Communications"
В таблице перечислены часто используемые специальные символы и их Unicode-значения.
Значения, Переменные и Литералы
Глава 2
Значения, Переменные и Литералы
В этой главе рассматриваются значения, распознаваемые 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
Объявление переменных
Объявление переменных
Вы может объявить переменную двумя способами:
Просто присвоив ей значение. Например, x = 42
С помощью ключевого слова var. Например, var x = 42
Область видимости переменной
Область видимости переменной
Если Вы устанавливаете идентификатор переменной путём присвоения вне функции, такая переменная называется глобальной, поскольку доступна в любом месте документа. Если Вы объявляете переменную внутри функции, она называется
локальной переменной, поскольку доступна только внутри данной функции.
Использование var при объявлении глобальной переменной не требуется. Однако Вы обязаны использовать var при объявлении переменой внутри функции.
Вы можете получить доступ к глобальным переменным, объявленным в одном окне или фрэйме, из другого окна или фрэйма, специфицируя имя окна или фрэйма. Например, если переменная phoneNumber объявляется в документе FRAMESET, Вы можете обратиться к этой переменной из дочернего фрэйма так: parent.phoneNumber.
Переменные
Вы используете переменные как символические имена для значений. Вы даёте переменной имя, по которому Вы ссылаетесь на неё и которое обязано соответствовать определённым требованиям.
Идентификатор в JavaScript, или name\имя, обязан начинаться с буквы или символа подчёркивания ("_"); последующие символы также могут быть цифрами (0-9). Поскольку JavaScript чувствителен к регистру символов, могут использоваться буквы (английские) от "A" до "Z" (верхний регистр) и от "a" до "z" (нижний регистр).
Вот некоторые примеры правильных имён: Number_hits, temp99, _name.
Совместимость Unicode с ASCII и ISO
Совместимость 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
Таблица 2.1 Специальные Символы 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-значения специальных символов
Таблица 2.2 Unicode-значения специальных символов
Пробельные символы | \u0009 | Tab/табуляция | <TAB> | ||||
\u000B | Vertical Tab/вертикальная табуляция | <VT> | |||||
\u000C | Form Feed/прогон страницы | <FF> | |||||
\u0020 | Space/пробел | <SP> | |||||
Терминаторы строки | \u000A | Line Feed/прогон строки | <LF> | ||||
\u000D | Carriage Return/возврат каретки | <CR> | |||||
Дополнительные escape-последовательности Unicode | \u000b | Backspace | <BS> | ||||
\u0009 | Horizontal Tab/горизонтальная табуляция | <HT> | |||||
\u0022 | Double Quote/двойная кавычка | " | |||||
\u0027 | Single 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
Замена символов/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 и его методы для работы с датами.
Объекты и функции также являются основными элементами языка. Можно считать объекты именованными контейнерами значений, а функции - процедурами, которые Ваше приложение выполняет.