sonyps4.ru

Нативные переменные в CSS. Уже пора…

Вы определяете переменную, используя ключевое слово var , также вы можете опционально в этом же выражении присвоить переменной значение. Переменные, которые определены в функции, называются локальными переменными , они доступны только внутри функции. Переменные, которые определены напрямую в элементе script , называются глобальными переменными , они доступны всем, включая другие скрипты. В показано использование локальных и глобальных переменных.

Листинг 5-6: Использование локальных и глобальных переменных Example var myGlobalVar = "apples"; function myFunc(name) { var myLocalVar = "sunny"; return ("Hello " + name + ". Today is " + myLocalVar + "."); }; document.writeln(myFunc("Adam")); document.writeln("I like " + myGlobalVar );

JavaScript – это язык со слабой типизацией. Это не означает, что в JavaScript нет типов. Это только обозначает, что вам не нужно напрямую указывать тип переменной, а также вы можете совершенно без проблем присвоить одной переменной несколько типов. JavaScript определит тип, основываясь на значении, которое вы присвоили переменной, а также будет свободно переключаться между разными типами в зависимости от содержания, в котором они используются. Результат работы кода из таков:

Hello Adam. Today is sunny. I like apples

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

В JavaScript представлено мало примитивных типов. Это string , number и boolean . Кажется, что список очень короткий, но JavaScript очень гибко управляется с этими тремя типами.

Работа со строками

Значения для типа string определяются с использованием одинарных или двойных кавычек, как показано в .

Листинг 5-7: Определение строковых переменных Example var firstString = "This is a string"; var secondString = "And so is this";

Знаки кавычек, которые вы используете, должны совпадать. Например, вы не можете начать строку с одинарной кавычки, а закончить двойными.

Работа с булевскими переменными

Булев тип (boolean) имеет два значения: true и false . В показано, как используются оба значения. Булев тип наиболее полезен при работе с условными операторами, которые я опишу далее в этой главе.

Листинг 5-8: Определение булевских значений Example var firstBool = true; var secondBool = false; Работа с числами

Тип number используется для представления как целых чисел , так и чисел с плавающей точкой (известных также как вещественные числа ). В представлен пример использования этого типа.

Листинг 5-9: Определение числовых значений Example var daysInWeek = 7; var pi = 3.14; var hexValue = 0xFFFF;

Вам не нужно указывать, какой вид числа вы используете. Вы просто присваиваете нужное значение, и JavaScript его обрабатывает соответствующим образом. В листинге я определил значение для целого числа, для числа с плавающей точкой и указал шестнадцатеричное значение при помощи приставки 0x .

Создание объектов

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

Листинг 5-10: Создание объекта Example var myData = new Object(); myData.name = "Adam"; myData.weather = "sunny";

Я создал объект new Object() , а результат (только что созданный объект) я назначил переменной myData . Как только объект создался, я могу назначить ему свойства, просто указав значение, например, так:

myData.name = "Adam";

До этого выражения у моего объекта не было свойства name . После того как выражение было выполнено, возникло свойство и ему было присвоено значение Adam . Прочитать значение свойства можно, если объединить имя переменной и имя свойства точкой, вот так:

document.writeln("Hello " + myData.name + ". ");

Использование литералов объекта

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

Листинг 15-11: Использование формата литерала объекта Example var myData = { name: "Adam", weather: "sunny" }; document.writeln("Hello " + myData.name + ". "); document.writeln("Today is " + myData.weather + ".");

Каждое свойство, которое вы хотите определить, отделяется от своего значения при помощи двоеточия (:), а сами свойства разделяются запятой (,).

Использование функций как методов

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

Листинг 15-12: Добавление метода объекту Example var myData = { name: "Adam", weather: "sunny", printMessages: function () { document.writeln("Hello " + this.name + ". "); document.writeln("Today is " + this.weather + "."); } }; myData.printMessages();

В этом примере я использовал функцию, чтобы создать метод printMessages . Обратите внимание, что ссылаясь на свойство, определенное в объекте, я использовал ключевое слово this . Когда функция используется в качестве метода, функция передается объекту, в котором был вызван метод, в качестве аргумента при помощи специальной переменной this . Результат работы кода таков:

Hello Adam. Today is sunny.

Совет

JavaScript может гораздо больше чего предложить, когда дело доходит до создания и управления объектами, но вам не нужны эти функции для работы с HTML5. Обратите внимание на книги, которые я рекомендовал в начале этой главы, если вы хотите углубиться в изучение этого языка.

Работа с объектами

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

Чтение и изменение значений свойств

Наиболее очевидной вещью, которую мы можем сделать с объектом, является чтение и изменение значений свойств, которые определяет объект. Для этого существует два различных синтаксических стиля, они оба представлены в .

Листинг 5-13: Чтение и изменение свойств объекта Example myData.name = "Joe"; myData["weather"] = "raining"; document.writeln("Hello " + myData.name + "."); document.writeln("It is " + myData["weather"] );

Первый способ таков, что его знают большинство программистов, и я его использовал в предыдущих примерах. Вы объединяете имя объекта и имя свойства, используя точку (точечная нотация), вот так:

myData.name = "Joe";

Второй способ – это "массивная" нотация (как при обращении к индексу массива), которая выглядит следующим образом:

myData["weather"] = "raining";

В данном случае имя свойства вы заключаете в квадратные скобки ([ и ]). Это может быть очень удобным способом доступа к свойству, потому что вы можете обратиться к нужному свойству, используя переменную:

var myData = { name: "Adam", weather: "sunny", }; var propName = "weather"; myData[propName ] = "raining";

Это основа для перечисления свойств объекта, о чем я сейчас расскажу.

Перечисление свойств объекта

Вы перечисляете свойства объекта, используя оператор for...in . В показано, как можно использовать этот оператор.

Листинг 5-14: Перечисление свойств объекта Example var myData = { name: "Adam", weather: "sunny", printMessages: function () { document.writeln("Hello " + this.name + ". "); document.writeln("Today is " + this.weather + "."); } }; for (var prop in myData) { document.writeln("Name: " + prop + " Value: " + myData); }

В цикле for...in в блоке кода выполняются выражения для каждого свойства объекта myData . Переменной prop назначено имя свойства, обрабатываемого при каждой итерации. Я использовал "массивную" нотацию, чтобы получить значение свойства объекта. Результат работы кода из листинга таков (я отформатировал результаты, чтобы их было проще читать):

Name: name Value: Adam Name: weather Value: sunny Name: printMessages Value: function () { document.writeln("Hello " + this.name + ". "); document.writeln("Today is " + this.weather + "."); }

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

Добавление и удаление свойств и методов

Даже если вы использовали литералы объекта, вы все равно можете определить для объекта новые свойства. Пример представлен в .

Листинг 5-15: Добавление нового свойства объекту Example var myData = { name: "Adam", weather: "sunny", }; myData.dayOfWeek = "Monday";

Как вы уже догадались, в объект также можно добавить новый метод, присвоив значению свойства функцию, как показано в .

Листинг 5-16: Добавление нового метода в объект Example var myData = { name: "Adam", weather: "sunny", }; document.writeln("Hello"); };

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

Листинг 5-17: Удаление свойства из объекта Example var myData = { name: "Adam", weather: "sunny", }; myData.sayHello = function() { document.writeln("Hello"); }; delete myData.name; delete myData["weather"]; delete myData.sayHello; Как определить, есть ли у объекта свойство

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

Листинг 5-18: Проверка на то, есть ли у объекта свойство Example var myData = { name: "Adam", weather: "sunny", }; var hasName = "name" in myData; var hasDate = "date" in myData; document.writeln("HasName: " + hasName); document.writeln("HasDate: " + hasDate);

В этом примере я сделал проверку для свойства, которое существует, и для свойства, которого нет. Значение переменной hasName будет true , значение свойства hasDate – false .

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

Переменные для использования только в шаблонах страницы раздела:

Эти переменные могут использоваться только в шаблонах страницы раздела. Они допустимы во всех HTML-основанных выходных форматах (Справка HTML, Броузерная справка, eBook и Справка Visual Studio / MS Help 2.0).

Переменная

Вставляет правильный тэг DOCTYPE в начале страниц вывода HTML. Эта переменная является основной во всех шаблонах и не должна быть удалена. Если Вы удалите ее, то Вы получите сообщение об ошибках от компилятора.

Вставляет правильную информацию набора символов в мета тэги в начале страниц вывода HTML. Эта переменная является основной во всех шаблонах и не должна быть удалена. Если Вы удалите ее, то Вы получите сообщение об ошибках от компилятора.

Вставляет ссылку на таблицу стилей CSS, содержащую всю информацию стилей для вашего проекта. Эта переменная является основной во всех шаблонах и не должна быть удалена. Если Вы удалите ее, то Вы получите сообщение об ошибках от компилятора.

Вставляет заголовок текущего раздела, если он существует. Если текущий раздел не имеет никакого заголовка, значение этой переменной - нуль. Это может отличаться от заголовка раздела, вставленного с .

Вставляет заголовок текущего раздела как простой текст. Это особенно полезно, если ваши проектные заголовки отличаются и длиннее, чем заголовки Содержания, которые вставлены с .

Это используется прежде всего для оптимизации механизма поиска, для которой Вы вставили бы это в мета тэг description , как это:

Вставляет основной текст раздела, то есть весть раздела, который отредактирован и отформатирован в вашем проекте в редакторе Help & Manual. Это - самая важная переменная - если Вы проигнорируете ее, то ваши разделы будут пусты!

Генерирует ряд "ссылок навигации" следа крошки к разделам выше текущего раздела в дереве Содержания. Эта переменная пуста в разделах верхнего уровня. В разделах второго уровня и ниже переменная генерирует ряд ссылок в формате Ссылка1> Ссылка2 > Ссылка3 ...

Текущий раздел не включен в ряд. Если Вы хотите поместить текущий заголовок раздела в конце следа крошки, Вы можете сделать это с переменной (см. ниже).

Переменная следа крошки пуста в разделах в секции Невидимые разделы.

Эта переменная имеет соответствующую пару условия: и . Эти условия могут использоваться, чтобы вставить след, только где это уместно, и вставить альтернативное содержимое, когда не уместно.

Переменные для использования только в Броузерной справке:

Все оставшиеся переменные уместны только в Броузерной справке (HTML):

Глобальные переменные для всех шаблонов Броузерной справки:

Переменная

Переменные только для шаблона Размещения набора фреймов:

Переменная

Вставляет навигационный сценарий, требуемый главным фреймом.

Переменные только для шаблона Содержания:

Переменная

Переменные и функции

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

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

Во втором разделе данной главы, говоря о передаваемых в функцию парамет рах, мы отметили, что переменные могут быть отправлены в функцию в каче стве.аргументов. Однако можно использовать и переменную из функции, если это глобальная переменная. Переменная становится таковой с помощью ин струкции global. Рассмотрим область действия, или область видимости пере менной. Область действия переменной это та часть программы, в которой переменная существует. По умолчанию переменные, которые вы создаете в сце нарии, имеются, пока работает ваш сценарий. И наоборот, переменные сре ды (такие как SOSTYPE) существуют на сервере от момента запуска до выклю чения.

Впрочем, функции создают новую область видимости. Переменные функ ции аргументы функции и любые переменные, определенные внутри функ ции, существуют только в этой функции и недоступны извне. Другими слова ми, это локальные переменные с локальной областью действия. Подобным образом к внешней переменной можно обратиться, только передав ее в функ цию как аргумент или же с помощью инструкции global. Последняя приблизи тельно означает: «Я хочу, чтобы эта переменная в функции была такой же, как и вне функции». Другими словами, глобальная инструкция превращает локальную переменную с областью видимости внутри функции в глобальную переменную с областью действия в пределах всей программы. Любые изменения глобаль ной переменной в функции автоматически передаются в переменную с тем же именем, когда она используется вне функции (после вызова функции, конеч но), без помощи команды return.
Синтаксис инструкции global следующий:

Function FunctionName (SArgument) {
global $Variable;
statement(s);

Рассмотрим подробнее, что же дает нам инструкция глобализации. Обыч ная переменная, даже если ее имя внутри функции полностью совпадает с та ким же именем в основной части программы, представляет собой совершенно другую структуру (возможно, с другим значением, нежели переменная вне функ ции). Пусть строка вызова функции выглядит как FunctionName ($Valuel) , а функция определена как FunctionName ($Argumentl). В момент обращения к функции РНР устанавливает значение $Argumentl равным значению $Valuel, и далее первое используется в теле функции. Если вы измените значение $Argumentl внутри функции, это никак не отразится на значении $Valuel. Если бы имена переменных случайно совпали, это бы ничего не изменило: они все равно являются двумя разными переменными. Область действия одной внут ри функции, другой вне функции. Поэтому, чтобы избежать путаницы, при написании функций мы предусмотрительно использовали различные имена пе ременных в строке определения функции и в строке ее вызова.

Мы затронули эту тему, потому что на самом деле необязательно применять разные имена. Для удобства можно использовать одно и то же имя в строке функции и в строке вызова (тогда легко запомнить передаваемые аргументы), но помните, что это разные переменные. То, что происходит со значением переменной внутри функции, остается в функции. И наоборот: изменения пе ременной вне функции не действуют на переменную с тем же именем внутри функции. Но, если вы сделали переменную глобальной с помощью инструкции global, она становится одной и той же переменной и внутри, и снаружи. Использование инструкции global

  • Откройте файл numbers.php в текстовом редакторе (листинг 9.6).
  • Уберите аргументы $Price и $TaxRate из функции CalculateTotal, что бы строка 2 выглядела так:
  • function CalculateTotal ($HowMany, $SavingsT {

    Переменные $Price и $TaxRate будут введены в функцию как $Cost и $Тах с помощью инструкции global, поэтому нет необходимости использовать их как аргументы.

  • Добавьте две глобальные инструкции.
  • global $Cost;
    global $Tax;

    Они «Прикажут» функции использовать переменные $Cost и $Тах, которые уже существуют вне ее.

  • Отредактируйте оставшуюся часть функции, заменив переменную $Price на $Cost, $TaxRate на $Тах, a $TheCost на $TotalCost.
  • $Тах++; // $Тах составляет 1.06. *
    $TotalCost ~ ($Cost * $HowMany);
    if (($TotalCost < 50) AND ($Savings)) {
    print ("Your $$Savings will not apply because
    -the total value of the sale is under !\n

    ");
    } if ($TotalCost >= 50) {
    $TotalCost = $TotalCost $Savings;
    }.
    $TotalCost = $TotalCost * $Tax;
    return $TotalCost;

    Так как теперь функцией используются разные имена переменных, необхо димо соответствующим образом изменить вычисления. Чтобы лучше понять область действия переменной, мы поменяли также переменную $TheCost на $TotalCost. Запомните, что $TotalCost в функции это совсем не та перемен ная, как переменная с тем же именем, но находящаяся вне функции

  • Ниже в сценарии, после строки $Тах = 0.06; (строка 29), распечатайте текущее значение переменной. Оно будет меняться в ходе дальнейшего выполнения сценария.
  • print ("The tax value is currently $$Tax .\n

    ");

    Для показа того, что инструкция global вводит переменную в функцию и что любые реализованные в функции изменения применяются глобально, распечатаем значение $Тах до и после вызова функции.

  • Измените строку вызова функции CalculateTotal () , чтобы переменные
  • $Тах и $Cost больше не передавались как аргументы.
    $TotalCost = CalculateTotal ($Quantity, $Discount);

    Так как функция принимает теперь только два аргумента, передача четырех аргументов вызовет ошибку.

  • Еще раз распечатайте значение переменной $Тах.
  • print ("After calling the function, the tax value
    is now $$Tax .\n

    ");

    Если бы не было инструкции global, то значения, распечатанные здесь и выше, были бы одинаковыми. Но, поскольку глобальная переменная $Тах была модифицирована в функции, распечатанные значения будут разными.

  • Сохраните сценарий (листинг 9.7), загрузите его на сервер и протестируй те в браузере (рис. 9.5). Не забудьте отправить в сценарий значение коли чества (и значение скидки, если захотите), добавив его к адресу URL или через HTMLформу.
  • Листинг 9.7 т Так как функции CalculateTotal требуются значения пере менных $Cost и $Тах, они легко могут быть включены с помощью инструкции global. Помните, переменные больше нельзя передавать как аргументы это может запутать программиста и вызвать определенные ошибки в работе при ложения.

    1
    22
    23
    24 Calculation Functions
    25
    26
    27

    В результате выполнения программы будет выведена таблица с разными параметрами, в том числе и переменными окружения в разделе «Apache Environment» (рис. 1).

    Рис. 1. Apache Environment

    Также можно написать программу на PHP, которая будет выводить все переменные окружения в виде таблицы (пример 3)..

    Пример 3. Вывод переменных окружения



    Загрузка...