1.5 JavaScript Data Types - JavaScript Interview Questions

1.5 JavaScript Data Types - JavaScript Interview Questions

JavaScript interview questions axtararkən tez-tez rast gəlinən mövzulardan biri JavaScript data types – məlumat tipləridir. Frontend developer vakansiyaları üçün bu bilik vacibdir. Bu bloqda siz JavaScript data types (məlumat tipləri) və onların unikal xüsusiyyətləri haqqında öyrənəcəksiniz.

JavaScript aşağıdakı primitive data types (sadə məlumat tipləri) təqdim edir:

  1. null
  2. undefined
  3. boolean
  4. number
  5. string
  6. symbol – ES2015-dən mövcuddur
  7. bigint – ES2020-dən mövcuddur

və bir complex data type olan object (obyekt). JavaScript Data Types

JavaScript data types

JavaScript compiler tərəfindən tanınan sadə məlumat tiplərinə null, undefined, number, string, boolean və s. daxildir. Bu suallar frontend müsahibə sualları arasında sıxlıqla olur. JavaScript dinamik olaraq tiplənən dildir, bu o deməkdir ki, dəyişən (javascript variables) konkret bir tipə aid olmur. Başqa sözlə, bir dəyişən müxtəlif tiplərdə dəyər daşıya bilər. Məsələn:

let counter = 120; // counter is a number
counter = false;   // counter is now a boolean
counter = "foo";   // counter is now a string

Dəyişəndə saxlanılan dəyərin mövcud tipini müəyyən etmək üçün typeof operatorundan istifadə olunur:

let counter = 120;
console.log(typeof(counter)); // "number"

counter = false; 
console.log(typeof(counter)); // "boolean"

counter = "Hi";
console.log(typeof(counter)); // "string"

Output: 
"number"
"boolean"
"string"

JavaScript-də dəyişənlər müxtəlif tiplərdə dəyərlər ala bilər. Bu xüsusiyyət veb saytların hazırlanması zamanı çevik yanaşma təmin edir.

The undefined type

undefined tipi yalnız bir dəyərə sahib olan primitive bir tipdir: undefined. Varsayılan olaraq, əgər dəyişən elan edilibsə, lakin işə salınmayıbsa (not initialized), ona undefined dəyəri təyin olunur (defaults to undefined).

Nümunəyə baxaq:

let counter;
console.log(counter);        // undefined
console.log(typeof counter); // undefined

Bu nümunədə counter bir dəyişəndir. O inicializasiya olunmadığı üçün avtomatik olaraq undefined olur. Onun tipi də undefined olacaq.

Qeyd edək ki, əgər typeof operatoru ilə elan olunmamış dəyişəni yoxlasanız da nəticə undefined olacaq:

console.log(typeof undeclaredVar); // undefined

Saytların hazırlanması zamanı dəyişənin undefined olub olmadığını yoxlamaq vacibdir. Bu nöqtədə typeof operatorundan istifadə olunur.

The null type

null tipi də yalnız bir dəyərə sahib olan ikinci primitive data type-dır: null. Məsələn:

let obj = null;
console.log(typeof obj); // object

typeof null nəticəsinin object qaytarması JavaScript-də məlum bir bug-dur. Bu problemi düzəltmək təklifi olsa da, çox sayda mövcud saytın işləməməsi riski səbəbindən rədd edilmişdir.

JavaScript-də null ilə undefined bərabər sayılır:

console.log(null == undefined); // true

Frontend developer vakansiya üçün müsahibəyə hazırlaşarkən null tipinin object kimi qaytarılması ilə bağlı suallar verilə bilər.

The number type

JavaScript number tipindən həm tam, həm də onluq ədədləri ifadə etmək üçün istifadə edir.

Tam ədəd nümunəsi:

let num = 100;

Onluq ədəd üçün decimal nöqtədən sonra rəqəm yazılır:

let price = 12.5; 
let discount = 0.05;

JavaScript avtomatik olaraq onluq ədəd tam ədəd kimi görünürsə, onu integer kimi qəbul edir:

let price = 200.00; // tam ədəd kimi qəbul edilir

Ən kiçik və ən böyük rəqəmləri almaq üçün Number.MIN_VALUE və Number.MAX_VALUE istifadə olunur:

console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
console.log(Number.MIN_VALUE); // 5e-324

Sonsuzluqları göstərmək üçün Infinity və -Infinity istifadə olunur:

console.log(Number.MAX_VALUE + Number.MAX_VALUE); // Infinity
console.log(-Number.MAX_VALUE - Number.MAX_VALUE); // -Infinity

JavaScript interview questions arasında Number.MIN_VALUE və NaN anlayışları da yer alır. Veb sayt hazırlamaq istəyənlər bu əsasları mütləq öyrənməlidirlər.

NaN

NaN (Not a Number) – keçərsiz ədədi ifadə edən xüsusi bir rəqəm tipidir. Məsələn:

console.log('a'/2); // NaN;

NaN iki əsas xüsusiyyətə malikdir:

  • NaN ilə edilən istənilən əməliyyat NaN qaytarır.
  • NaN heç bir dəyərə, hətta özünə belə bərabər deyil:

console.log(NaN/2); // NaN
console.log(NaN == NaN); // false

The string type

JavaScript-də string sıfır və ya daha çox simvoldan ibarət olan mətn tipidir. String həm tək (‘ ’), həm də qoşa (“ ”) dırnaqla yazıla bilər:

let greeting = 'Hi';
let message  = "Bye";

Əgər string daxilində dırnaq istifadə etmək lazımdırsa, \ istifadə olunur:

let message = 'I\'m also a valid string';

JavaScript string-ləri immutable-dur, yəni dəyişdirilə bilməz. Amma yeni string yaradıla bilər:

let str = 'JavaScript';
str = str + ' String';

Aşağıdakı nümunədə string-in ilk simvolunu dəyişmək cəhdi uğursuz olacaq:

let s = 'JavaScript';
s[0] = 'j';
console.log(s) // 'JavaScript'

Saytların hazırlanması zamanı string-lərin immutable olması vacib məqamdır. Front end vakansiya müsahibələrində bu tip detallı suallar verilir.

The boolean type

boolean tipində yalnız iki dəyər olur: true və false. Məsələn:

let inProgress = true;
let completed = false;

console.log(typeof completed); // boolean

JavaScript digər tipləri boolean-ə çevirməyə icazə verir. Bu zaman Boolean() funksiyası istifadə olunur:

Tiptruefalse
stringnon-empty stringempty string
numbernon-zero və Infinity0, NaN
objectnon-null objectnull
undefined-undefined

Nümunələr:

console.log(Boolean('Hi'));// true
console.log(Boolean(''));  // false

console.log(Boolean(20));  // true
console.log(Boolean(Infinity));  // true
console.log(Boolean(0));  // false

console.log(Boolean({foo: 100}));  // true
console.log(Boolean(null));// false

Boolean tipli dəyişənlər true və false dəyərləri ilə frontend tətbiqlərdə geniş istifadə olunur. Saytların hazirlanmasi zamanı şərt operatorları ilə sıx işlənir.

The symbol type

JavaScript ES6 ilə symbol adlı yeni primitive tip əlavə edib. Bu tipin literal forması yoxdur. Yeni symbol yaratmaq üçün Symbol() funksiyasından istifadə olunur:

let s1 = Symbol();
console.log(Symbol() == Symbol()); // false

ES6 ilə gələn Symbol tipi müasir vebsayt hazırlanması zamanı unikal identifikator kimi istifadə olunur. Bu sual JavaScript interview questions siyahısında yer ala bilər.

The bigint type

bigint tipi 2^53 - 1-dən böyük ədədləri ifadə etmək üçün istifadə olunur. Ədədi n ilə bitirərək bigint təyin edilir:

let pageView = 9007199254740991n;
console.log(typeof(pageView)); // 'bigint'

Əgər ədədi dəyərlər 2^53-dən böyükdürsə, BigInt istifadə olunmalıdır. Bu xüsusiyyət yeni nəsil saytların hazırlanması üçün önəmlidir.

The object type

JavaScript-də object, key-value (açar-dəyər) cütlərindən ibarət property-lər toplusudur.

Aşağıdakı nümunədə obyekt literal sintaksisi ilə boş bir obyekt müəyyən olunub:

let emptyObject = {};

Aşağıdakı nümunədə isə person (şəxs) adlı obyekt yaradılıb və bu obyektin firstName (ad) və lastName (soyad) adlı iki xüsusiyyəti var:

let person = {
   firstName: 'John',
   lastName: 'Doe'
};

Bir obyektin xüsusiyyətinin adı istənilən mətn (string) ola bilər. Əgər bu ad JavaScript-də etibarlı identifikator deyilsə, onu dırnaq içərisində yazmaq lazımdır.

Məsələn, əgər person obyektində first-name adlı bir xüsusiyyət varsa, onu "first-name" şəklində dırnaq içərisində yazmaq lazımdır. (məsələn, boşluq və ya - simvolu istifadə olunursa)

let person = {
 "first-name": "John"
};

Bir obyektin xüsusiyyəti həmçinin başqa bir obyekt də ola bilər. Məsələn:

let contact = {
   firstName: 'John',
   lastName: 'Doe',
   email: 'john.doe@example.com',
   phone: '(408)-555-9999',
   address: {
       building: '4000',
       street: 'North 1st street',
       city: 'San Jose',
       state: 'CA',
       country: 'USA'
   }
}

Bu nümunədə contact obyektində firstName, lastName, email, phone address xüsusiyyətləri var. address xüsusiyyəti isə bir obyekt olub aşağıdakı xüsusiyyətlərə malikdir: building, street, city, state, country.

JavaScript-də object tipi frontend developer üçün əsas anlayışlardan biridir. Frontend müsahibə sualları arasında obyektlərlə işləmə bacarığı da qiymətləndirilir.

Obyekt xüsusiyyətlərinə müraciət

Nöqtə notasiya üsulu (dot notation)

Aşağıdakı nümunədə contact obyektinin firstName və lastName xüsusiyyətlərinə nöqtə notasiya ilə müraciət olunur:

console.log(contact.firstName);
console.log(contact.lastName);

Əgər mövcud olmayan xüsusiyyətə müraciət etsəniz, nəticə undefined olacaq:

console.log(contact.age); // undefined

Array-oxşar notasiya (kvadrat mötərizə ilə - bracket notation)

Alternativ olaraq, xüsusiyyətə kvadrat mötərizə ilə də müraciət edə bilərsiniz:

console.log(contact['phone']); // '(408)-555-9999'
console.log(contact['email']); // 'john.doe@example.com'

Bu üsul xüsusilə xüsusiyyətin adı dəyişkənlə təyin olunanda və ya qeyri-standart ad olanda faydalıdır (məsələn, "first-name").

Saytların hazirlanmasi zamanı obyektlərdəki məlumatlara dot və bracket notasiya ilə müraciət edilir. Bu biliklər frontend developer vakansiyası üçün vacibdir.

Nəticə

Bu bloq yazısı JavaScript data types mövzusunu ətraflı izah edir və frontend developer olmaq istəyənlər, müsahibəyə hazırlaşanlar və ya saytların hazırlanması ilə məşğul olanlar üçün əsas məlumat bazası rolunu oynayır. Əgər siz də "JavaScript interview questions", "frontend müsahibə sualları", ya da "veb sayt hazırlanması" kimi axtarışlar edirsinizsə, bu məlumatlar sizin üçün əvəzolunmaz olacaq.

JavaScript Müsahibə Sualları - JavaScript Interview Questions

this açar sözünün funksiyadakı davranışı necə fərqlənir?

const person = {
 name: "Aysel",
 sayHi: function () {
   console.log("Hi, I'm " + this.name);
 },
};

const greet = person.sayHi;
greet(); // Nəticə nə olacaq?

Bu sualda yoxlanılır:

  1. this konteksti necə işləyir
  2. Obyektdən kənarda funksiyanın çağırılması zamanı nə baş verir

JavaScript-də == və === fərqi nədir?

Nümunə cavab gözləntisi:
== tip çevirməsi aparır və yalnız dəyərləri müqayisə edir, === isə həm tip, həm də dəyəri yoxlayır.

0 == "0"   // true
0 === "0"  // false

map() və forEach() metodları arasında fərq nədir?

Nümunə cavab gözləntisi:
map() yeni array qaytarır, forEach() isə sadəcə hər elementi işləyir, nəticə qaytarmır.

let numbers = [1, 2, 3];
let doubled = numbers.map(num => num * 2); // [2, 4, 6]

numbers.forEach(num => console.log(num * 2)); // nəticə konsola yazılır, array qaytarmır