მონაცემთა ტიპები

ყოველ პროგრამირების ენას გააჩნია ჩაშენებული მონაცემთა ტიპები და სტრუქტურები, თუმცა ზოგჯერ ერთი ენის ტიპი განსხვავდება მეორე ენის ტიპისაგან. ამ თავში განვიხილავთ ჩაშენებულ მონაცემთა ტიპებს JavaScript-ში.

მკაცრად ტიპიზირებული vs არა მკაცრად ტიპიზირებული

JavaScript არის დინამიური ენა დინამიური ტიპებით. დინამიური ენა გულისხმობს, რომ ის არ არის მკაცრად ტიპიზირებული ენა, მასში აღწერილი ცვლადის ტიპის მნიშვნელობის შეცვლა შესაძლებელია თითქმის ყოველთვის.

JS
let anyValue = 22;
anyValue = 'ტესტ';
anyValue = true;
anyValue = null;

პრიმიტიული მნიშვნელობები

ყოველი ტიპი გარდა ობიექტისა არის პრ იმიტიული ტიპის მნიშვნელობები.

ყოველ პრიმიტიულ ტიპს, გარდა null, შეიძლება გაიტესტოს typeof ოპერატორით.

ყოველ პრიმიტიულ ტიპს, გარდა null და undefined, შეფუთულნი არიან თავიან ობიექტში, რომელი სასარგებლო მეთოდებს გვთავაზობს, პრიმიტიულ ტიპებთან მუშაობისთვის. როდესაც პირდაპირ მნიშვნელობას ვანიჭებთ პრიმიტიული ტიპის სახით, JavaScript ავტომატურად მოისაზრებს იმ ადგილას ობიექტს, რაც გვაძლევს შესაძლებლობას, რომ გამოვიყენოთ მათი მეთოდები და თვისებები.

ტიპი typeof დაბრუნებული შედეგი შემფუთავი ობიექტი
null "object" N/A
undefined "undefined" N/A
boolean "boolean" Boolean
number "number" Number
bigint "bigint" BigInt
string "string" String
symbol "symbol" Symbol

Null ტიპი

null ტიპს მხოლოდ ერთი მნიშვნელობა გააჩნია null. null შეგვიძლია წარმოვიდგინოთ მნიშვნელობა, რომელიც ვიცით, რაც უნდა იყოს მაგრამ მას გააჩნია არანაირი მნიშვნელობა. უფრო ზუსტად, რომ ვთქვათ null მიუთითბს ობიექტის არ არსებობაზე.

Undefined ტიპი

undefined ტიპს მხოლოდ ერთი მნიშვნელობა გააჩნია undefined. undefined მიუთითებს განუსაზღვრელობას. მეტწილადად JavaScript მნიშვნელობას ნაგულისხმევად ანიჭებს, undefined. მაგალითები:

  • return ქივორდით, რომელსაც არ გააჩნია არანაირი მნიშვნელობა (return;) აბრუნებს undefined.
  • ფუნქცია/მეთოდი, რომელსაც არ გააჩნია return, აბრუნებს undefined.
  • ცვლადის ინიციალიზების დროს მნიშვნელობას თუ არ გავუწერთ(let test;), მას ავტომატურად მიენიჭება undefined.

Boolean ტიპი

boolean(ბულის) ტიპის მნიშვნელობა, არის ლოგიკური ერთეული, რომელსაც გააჩნია მხოლოდ ორი მნიშვნელობა: true(ჭეშმარიტი) და false(მცდარი).

ბულის ტიპის მნიშვნელობები მეტწილადად გამოიყენება პირობითი ოპერატორების დროს, ასევე: ternary, if...else და სხვა შემთხვევებში.

Number ტიპი

Number ტიპი ინახავს რიცხვებს. მას შეუძლია შეინახოს დადებითი რიცხვები 2-1074 (Number.MIN_VALUE) და 21024 (Number.MAX_VALUE) ინტერვალში, ასევე გვაქვს უარყოფითი რიცხვებისთვისაც ინტერვალი -2-1024 და -21024, თუმცა უსაფრთხოდ შეიძლება შევინახოთ მთელი რიცხვები შემდგომ ინტერვალში: -(253 - 1) (Number.MIN_SAFE_INTEGER) დან 253 - 1 (Number.MAX_SAFE_INTEGER) მდე. ამ ინტერვალის გარეთ JavaScript არ შეუძლია მთელი რიცხვების უსაფრთხოდ წარმოდგენა, ინტერვალის გარეთ წარმოადგენს, როგორც ათწილად რიცხვებს. თუ გსურთ რიცხვის შემოწმება, არის თუ არა უსაფრთხო ინტერვალში, შეგიძლიათ გამოიყენოთ Number.isSafeInteger() მეთოდი.

მნიშვნელობები შემდგომ ინტერვალში ±(2-1074 დან 21024 მდე), ავტომატურად გადაკეთდება:

  • დადებითი რიცხვი, რომელიც მეტია Number.MAX_VALUE-ზე, გადაკეთდება, როგორც +Infinity.
  • დადებითი რიცხვი, რომელიც ნაკლებია Number.MIN_VALUE-ზე, გადაკეთდებამ, როგორც +0.
  • უარყოფითი რიცხვი, რომელიც ნაკლებია -Number.MAX_VALUE-ზე, გადაკეთდება, როგორც -Infinity.
  • უარყოფითი რიცხვი, რომელიც მეტია -Number.MIN_VALUE-ზე, გადაკეთდებამ, როგორც -0.

+Infinity და -Infinity მოქმედებს მსგავსად, როგორც მათემატიკაში გვაქვს უსასრულობა, თუმცა მცირედი განსხვავებებით. იხილეთ მეტი დეტალებისთვის: Number.POSITIVE_INFINITY და Number.NEGATIVE_INFINITY

რიცხვით ტიპს გააჩნია ერთ მნიშვნელობა ბევრი წარმოდგენებით, მაგალითად: 0 შეიძლება წარმოვადგინოთ, როგორც -0 და +0. პრაქტიკაში მათ არანაირი განსხვავება არ აქვთ წარმოდგენების დროს, მაგრამ განსხვავებას შეამჩნევთ ერთ მომენტში, როცა გვაქვს 0 ზე გაყოფა.

console.log არის console ობიექტის მეთოდი, რომელიც გამოიყენება იმისათვის, რომ ცვლადის მნიშვნელობა გავიგოთ.

JS
console.log(22 / +0); // Infinity
console.log(22 / -0); // -Infinity

NaN ("Not a Number") არის სპეციალური მნიშვნელობა, რომელიც ენიჭება რიცხვს მაშინ, როცა არითმეთიკული მოქმედება ვერ სრულდება. ასევე ის არის JavaScript-ში ერთადერთი მნიშვნელობა, რომელიც საკუთარ თავთან შედარებისას მცდარ შედეგს გვიბრუნებს.

BigInt ტიპი

BigInt ტიპი არის პრიმიტიული რიცხვითი ტიპი, რომელიც წარმოადგენს ისევ რიცხვს. BigInt-ით შესაძლებელია, უსაფრთხოდ შევინახოთ დიდი რიცხვები და მოქმედებები ჩვატაროთ მასზე, რომელიც ცდება უსაფრთხო ლიმიტს (Number.MAX_SAFE_INTEGER) რიცხვებისათვის.

BigInt იქმნება n დამატებით რიცხვის ბოლოს ან BigInt() ფუნქციის გამოძახებით.

თითქმის ყველა ოპერატორი არის დაშვებული BigInt-თან მუშაობის დროს, რომლებიც არის: +, -, *, ** და %, დაუშვებელია >>>.

String ტიპი

String ტიპი წარმოადგენს ტექსტის მნიშვნელობას. თითოეულ სიმბოლოს string-ში, დაკავებული აქვს თავისი პოზიცია, ეს პოზიცია შესაძლებელია წარმოვადგინოთ, როგორც ინდექსები. ინდექსები არის ნატურალური რიცხვები. პირველი ინდექსი ყოველთვის არის 0 და მისი შემდგომი იზრდება 1-ით. string-ის სიგრძე(length) წარმოადნგეს, მთელ რიცხვს, რომელიც ითვლის თუ რამდენი სიმბოლო არის ტექსტში. თუ გვსურს კონკრეტულ ინდექსზე მდგომი ელემენტის ამოღება, მაშინ მას უნდა მივწვდეთ [](Square brackets) სიმბოლოს გამოყენებით, სადაც ჩავწერთ რიცხვს.

JS
const name = 'educata';
console.log(name[0]); // e
console.log(name[1]); // d
console.log(name.length); // 7

Symbol ტიპი

Symbol არის უნიკალური და შეუცვლელი პრიმიტიული ტიპი, რომელიც შესაძლებელია, გამოყენებული იქნას ობიექტის თვისების გასაღებად(key). ზოგ პროგრამულ ენაში, სიმბოლოებს ეძახიან ატომებს. მათი დანიშნულება არის უნიკალური key-ს შექმნა, რაც გარანტიას გვაძლევს, რომ თითოეული key იქნება უნიკალური, შედეგად კი ვღებულობთ, 1 key = 1 თვისებას.

Object ტიპი

JavaScript-ში Object-ები წარმოდგენილი არის, როგორც კოლექცია თვისებების. ობიექტის ტიპის იდეა არის, რომ შევინახოთ ერთი ტიპის ცვლადში, სხვადასხვა ტიპის მნიშვნელობები, სადაც თითოეულ მათგანს ექნება უნიკალური იდენტიფიკატორი(key). key შეიძლება წარმოვადგინოთ, როგორც string-ით ან symbol-ოთი. key საშუალებით შეგვიძლია, ამოვიღოთ შენახული თვისება ან მეთოდი (მეთოდი შესაძლებელია არ იყოს key-ზე მიბმული). უფრო დეტალურად ობიექტი განხილული იქნება: