Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Оператор + в языке JavaScript выполняет сложение чисел и конкатенацию строк. Если какой-либо из его операндов является объектом, JavaScript преобразует объект, используя специальное преобразование объекта в простое значение вместо преобразования объекта в число, используемого другими арифметическими операторами. То же относится и к оператору равенства == . Если выполняется сравнение объекта с простым значением, оператор выполнит преобразование объекта с использованием правил преобразования в простое значение.
Преобразование объектов в простые значения, используемое операторами + и == , предусматривает особый подход для объектов Date . Класс Date является единственным типом данных в базовом JavaScript, который определяет осмысленные преобразования и в строку, и в число. Преобразование любого объекта, не являющегося датой, в простое значение основано на преобразовании в число (когда первым применяется метод valueOf() ), тогда как для объектов типа Date используется преобразование в строку (первым применяется метод toString() ). Однако преобразование выполняется не совсем так, как было описано выше: простое значение, возвращаемое методом valueOf() или toString(), используется непосредственно, без дополнительного преобразования в число или в строку.
Оператор < и другие операторы отношений выполняют преобразование объектов в простые значения подобно оператору == , но не выделяя объекты Date: для любого объекта сначала предпринимается попытка применить метод valueOf() , а затем метод toString() . Любое простое значение, полученное таким способом, используется непосредственно, без дальнейшего преобразования в число или в строку.
+, ==, != и операторы отношений являются единственными, выполняющими специальное преобразование строки в простое значение. Другие операторы выполняют более явные преобразования в заданный тип и не предусматривают специальной обработки объектов Date . Оператор - , например, преобразует свои операнды в числа. Следующий фрагмент демонстрирует поведение операторов +, -, == и > при работе с объектами Date :
var now = new Date(); // Создать объект Date
typeof (now +1) // => "строка": + преобразует дату в строку
typeof (now - 1) // => "число": - выполнит преобразование объекта в число
now == now.toString() // => true: неявное и явное преобразование в строку
now > (now -1) // => true: > преобразует объект Date в число
3.9. Объявление переменных
Прежде чем использовать переменную в JavaScript, ее необходимо объявить. Переменные объявляются с помощью ключевого слова var следующим образом:
var і;
var sum;
Один раз использовав ключевое слово var, можно объявить несколько переменных:
var і, sum;
Объявление переменных можно совмещать с их инициализацией:
var message = "hello";
var i = 0, j = 0. k = 0;
Если начальное значение в инструкции var не задано, то переменная объявляется, но ее начальное значение остается неопределенным ( undefined ), пока не будет изменено программой.
Обратите внимание, что инструкция var также может включаться в циклы for и for/in (о которых рассказывается в главе 5), что позволяет объявлять переменную цикла непосредственно в самом цикле. Например:
for(var і = 0; і < 10; i++) console.log(i);
for(var і = 0, j=10; і < 10; i++,J —) console.log(i*j);
for(var p in o) console.log(p);
Если вы имеете опыт использования языков программирования со статическими типами данных, таких как С или Java, то можете заметить, что в объявлениях переменных в языке JavaScript отсутствует объявление типа. Переменные в языке JavaScript могут хранить значения любых типов. Например, в JavaScript допускается присвоить некоторой переменной число, а затем этой же переменной присвоить строку:
var і = 10;
і = "ten";
3.9.1 Повторные и опущенные объявления
С помощью инструкции var МОЖНО объявить одну и ту же переменную несколько раз. Если повторное объявление содержит инициализатор, то оно действует как обычная инструкция присваивания.
Если попытаться прочитать значение необъявленной переменной, JavaScript сгенерирует ошибку. В строгом режиме, предусмотренном стандартом ECMAScript 5 (раздел 5.7.3), ошибка также возбуждается при попытке присвоить значение необъявленной переменной. Однако исторически и при выполнении не в строгом режиме, если присвоить значение переменной, не объявленной с помощью инструкции var , то JavaScript создаст эту переменную как свойство глобального объекта, и она будет действовать практически так же (но с некоторыми отличиями, описываемыми в разделе 3.10.2), как корректно объявленная переменная. Это означает, что глобальные переменные можно не объявлять. Однако это считается дурной привычкой и может явиться источником ошибок, поэтому всегда старайтесь объявлять свои переменные с помощью var .
3.10. Область видимости переменной
Область видимости ( scope ) переменной - это та часть программы, для которой эта переменная определена. Глобальная переменная имеет глобальную область видимости - она определена для всей JavaScript-программы. В то же время переменные, объявленные внутри функции, определены только в ее теле. Они называются локальными и имеют локальную область видимости. Параметры функций также считаются локальными переменными, определенными только в теле этой функции.
Внутри тела функции локальная переменная имеет преимущество перед глобальной переменной с тем же именем. Если объявить локальную переменную или параметр функции с тем же именем, что у глобальной переменной, то фактически глобальная переменная будет скрыта:
var scope = "global"; // Объявление глобальной переменной
function checkscope() {
var scope = "local"; // Объявление локальной переменной с тем же именем
return scope; // Вернет локальное значение, а не глобальное
}
checkscope() // => "local"
Объявляя переменные с глобальной областью видимости, инструкцию var можно опустить, но при объявлении локальных переменных всегда следует использовать инструкцию var . Посмотрите, что получается, если этого не сделать:
scope = "global";// Объявление глобальной переменной, даже без var.
Интервал:
Закладка: