Передача параметров по значению и по ссылке

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

function passByVal(arg1) {

var arg1 = 10;

}

var x = 5;

passByVal(5);

alert(x);

//выведет на экран число 5, так как параметр передавался по значению

function passByRef(arr1) {

arr1[0] = "NEW";

}

var y = ["first", "second"];

passByRef(y);

alert(y);

//выведет на экран «NEW, second», так как параметр передавался по ссылке, и значение первого элемента массива изменилось в основной части скрипта

Глобальные и локальные переменные

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

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

function myFunc() {

var x = "local";

y = "global";

}

myFunc();

alert(window.x);

//вернет undefined

alert(y);

//вернет слово global

alert(x);

//вызовет ошибку выполнения скрипта

Объектная модель

В JavaScript используются следующие виды объектов:

пользовательские объекты – это объекты, которые создаём мы сами с помощью конструктора объекта Object;

встроенные объекты языка JavaScript – String – строка текста; Array – массив; Date – дата и время; Math – математические функции; Object – содержит конструктор для создания пользовательских объектов;

объекты браузера – создаются автоматически при загрузке документа в браузер:

window – объект верхнего уровня в иерархии объектов браузера;

document– содержит свойства, которые относятся к текущему HTML-документу;

location – содержит свойства, описывающие местонахождение текущего документа, например адрес URL;

navigator – содержит информацию о версии браузера;

history – содержит информацию обо всех ресурсах, к которым пользователь обращался во время текущего сеанса;

объекты, связанные с тегами HTML и стилями CSS – в JavaScript большинству тэгов HTML и стилей CSS соответствуют свойства объекта document, которые сами также являются объектами;

Пользовательские объекты

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

function Book() {

}

Создание экземпляра объекта типа book будет иметь вид:

var myBook = new Book();

Конструктор может обращаться к создаваемому объекту, используя ключевое слово this. Таким образом можно добавить свойство создаваемому объекту:

function Book() {

this.paper = true;

}

var myBook = new Book();

alert(myBook.paper);

//выведет на экран true, т.к. все объекты типа Book будут иметь свойство paper со значением true

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

function Book(isPaper) {

if (isPaper) this.paper = true;

else this.paper = false;

}

var myBook = new Book(false);

alert(myBook.paper);

//выведет на экран false

Прототипы

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

Book.prototype.paper = false;

Book.prototype.isPaperBook = function() {

if (this.paper) alert("This is a paper book");

else alert("This is not a paper book");

}

function Book(isPaper) {

if (isPaper) this.paper = true;

}

var myBook = new Book(true);

myBook.isPaperBook();

//выведет на экран фразу «This is a paper book»

В этом примере показано создание метода объекта и свойства, причем в прототипе описано, что свойство paper имеет значение false. Однако в конструкторе это свойство переопределяется, если при создании объекта конструктору передается параметр со значением true.

Хеш-таблицы в JavaScript

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

Объекты позволяют хранить и получать значения по ключам:

var h = new Object();

h.property = 10;

alert(h.property);

Следующий код будет выполнен, как ожидалось, и выведет на экран число 110:

var h = new Object();

h.property = 10;

h[0] = 100;

alert(h.property + h[0]);

Следует заметить, что свойства не конфликтуют между собой, то есть h.property и h[0] – два разных свойства объекта.

В квадратные скобки можно заключать не только числа:

var h = new Object();

h.property = 10;

var s = 'ty';

alert(h['proper' + s]);

То есть h['property'] то же самое, что и h.property.

Удаление свойств осуществляется с помощью оператора delete:

var h = new Object();

h['property'] = 10;

alert(delete h['property']);

//выведет на экран true

alert(h['property']);

//выведет на экран undefined

Последний пример – перебор всех свойств объекта:

var h = new Object();

...

var props = '';

for(var i in h)

props += i + ' : ' + h[i] + '\n';

alert(props);

Следует заметить, что переменная i внутри цикла содержит имя свойства,
а не его значение.

Наши рекомендации