§ 22. Асновы мовы JavaScript

22.3. Аб'екты. Метады працы з аб'ектамі

Аб'ект як тып даных складаецца з многіх значэнняў (альбо простых, такіх як лікі і радкі, альбо складаных, напрыклад іншых аб'ектаў), якія называюцца ўласцівасцямі аб'екта. Два асобных аб'екта ў JavaScript ніколі не будуць роўнымі, нават калі яны маюць роўны набор уласцівасцей.

Аб'ява аб'екта ў JavaScript:

var <імя аб'екта> = {
    <уласцівасць_1>:<значэнне>,
    …
    <уласцівасць_n>:<значэнне> };

Разгледзьце прыклад 22.20.

Кожны раз, калі скрыпт спрабуе звярнуцца да ўласцівасці або метаду значэння простага тыпу, інтэрпрэтатар часова пераўтворыць яго ў аб'ект адпаведнага тыпу. Часовыя аб'екты, у якія пераўтворацца значэнні прымітыўнага тыпу, называюць аб'ектамі абгорткамі. Адразу пасля звароту да ўласцівасці або метаду аб'ект абгортка знішчаецца. Аб'екты абгорткі ствараюцца толькі для значэнняў тыпу number, string і boolean.

Аб'ект String будзе мець тып даных object, калі ён створаны з дапамогай аператара new (прыклад 22.21). Апісанне і прыклады выкарыстання некаторых стандартных метадаў працы з аб'ектам string прыведзены ў Дадатку.

У JavaScript для захоўвання упарадкаваных даных выкарыстоўваецца структура даных масіў — Array. Элементы масіва нумаруюцца, пачынаючы з нуля. Існуе некалькі спосабаў аб'явы масіву (прыклад 22.22).

Памер масіву можа павялічвацца і памяншацца ў любы час. Атрыбут масіву length вызначае агульную колькасць элементаў масіву. У масіве могуць захоўвацца элементы любога тыпу (прыклад 22.23).

Масівы пашыраюць аб'екты, так як прадугледжваюць спецыяльныя метады для працы са спарадкаванымі структурамі даных. Апісанне і прыклады выкарыстання некаторых стандартных метадаў працы з аб'ектам Array прыведзены ў Дадатку.

Для захоўвання матэматычных канстант і функцый у JavaScript прызначаны аб'ект Math. Метады, з якімі працуе гэты аб'ект, аналагічныя матэматычным функцыям, якія выкарыстоўваюцца ў мове С++ (прыклад 22.24). Гэты аб'ект не працуе з лікамі тыпу BigInt.

Для працы з датай і часам у JavaScript выкарыстоўваюцца аб'екты Date. Такія аб'екты могуць быць створаны толькі шляхам выкліку функцыі Date з выкарыстаннем аператара new. Некаторыя ўласцівасці аб'екта Date:

  • Утрымліваюць дату ў выглядзе ліку мілісекунд, якія прайшлі з 01.01.1970.
  • Нумарацыя месяцаў пачынаецца з 0.
  • Калі перададзены два аргументы, адсутныя аргументы ўстанаўліваюцца ў стартавыя значэнні.
  • Выклік функцыі Date без аператара new верне радок з бягучай датай і часам.
У прыкладах 22.25 і 22.26 разгледжаны выпадкі выкарыстання аб'екта Date і метады працы з аб'ектамі такога тыпу.

Прыклад 22.20. Стварэнне аб'екта.

var

person = {firstName: "Ян",

         lastName: "Тур",

         age: 20,

         eyeColor: "шэры"};

Прыклад 22.21. Аб'ект String.

var
str =
"Гэта просты радок";

 

var
s_O =
new String("Аб'ект String");

 

typeof strLit   //string

 

typeof s_O      //object

Прыклад 22.22. Спосабы аб'явы масіва.

var holidays =

["1 мая","7 чэрвеня","3 ліпеня"];

 

var holidays = new Array

("1 мая", "7 чэрвеня", "3 ліпеня");

 

var holidays = new Array(3);

  holidays[0] = "1 мая";

  holidays[1] = "7 чэрвеня";

  holidays[2] = "3 ліпеня";

Прыклад 22.23. Масіў элементаў з розным тыпам даных. Вызначэнне колькасці элементаў.

 var a = [23, "Ян", true,

  function() {alert("свет");}];

 

 alert(a[1]);      // Ян

 

 alert(a.length);  // 4

Прыклад 22.24. Выкарыстанне метадаў аб'екта Math.

var x = Math.PI;

 

 var y = Math.sqrt(16);

 

 var z = Math.round(4.7);

Трыганаметрычныя функцыі прымаюць у параметрах або вяртаюць вуглы ў радыянах. Для пераўтварэння радыянаў у градусы трэба падзяліць іх на велічыню Math.PI/180. Для пераўтварэння ў зваротным кірунку трэба памножыць градусы на гэтую ж велічыню.

Прыклад 22.25. Стварэнне аб'екта Date.

 new Date();

// бягучая дата і час

 

 new Date(0);

/* колькасць мілісекунд, якія прайшлі з 01.01.1970 */

 

 new Date(1982, 8, 19);

// 1982-09-19

 

 new Date("January 1, 2022");

// 2022-01-01

 

 new Date(2020, 13, 1);

 new Date(2021, 1, 1);

/* абедзве функцыі будуць утрымліваць дату 2021-02-01 */

 

 new Date(2021, 0, 1, 2, 3, 4);

// 2021-01-01 02:03:04

Прыклад 22.26. Метады аб'екта Date.

Метады

Апісанне

getFullYear()

Атрымаць год

(з 4 лічбаў)

getMonth()

Атрымаць месяц

(ад 0 да 11)

getDate()

Атрымаць лік месяца

(ад 1 да 31)

getHours() getMinutes() getSeconds()

Атрымаць адпаведныя кампаненты часу

getDay()

Атрымаць дзень тыдня

 

var d = new Date(2021, 1, 28);

 

  d.setDate(d.getDate() + 2);

  alert(d); // 2 сакавіка, 2021

 

var d = new Date;

 

  d.setDate(-1);

  alert(d);

/* перадапошні лік

папярэдняга месяца */