April 26, 2020

ЖаваСкрипт собеседованияда бериладиган 5 та қийинмас саволлар | @progerlive

1. ЖаваСкрипт тенглигини текшириш хусусиятларини тушунтиринг

Қийинчилик: ⭐️

ЖаваСкриптда қийматларнинг тенглигини текшириш учун иккита оператор мавжуд. Биринчиси, қатъий тенглик оператори деб аталади. Иккинчиси - текширилган миқдорларнинг турларини ўзгартириш учун ишлатилиши мумкин бўлган қатъий бўлмаган тенглик оператори.

Қаттиқ тенглик оператори (===) тенгламанинг қийматларини текширув турини ўзгартирмасдан текширади.

Қаттиқ бўлмаган тенглик оператори (==) тенглик қийматларини текширади ва уларни умумий турга ўзгартиради.

var a = "42"; 
var b = 42;
a = = К;   // true
 a = = = b;  // false

ЖаваСкриптда турли хил тенглик текширувчиларидан фойдаланиш бўйича баъзи кўрсатмалар:

Агар таққосланган қийматларнинг ҳар бири тўғри ёки нотўғри бўлса, == операторидан қочишга ҳаракат қилинг. === операторидан фойдаланинг.

Агар сиз қуйидаги қийматлар билан ишлаётган бўлсангиз === операторидан фойдаланинг: 0, "" ёки [] (бўш қатор).

Бошқа барча ҳолатларда, сиз == операторидан ишонч билан фойдаланишингиз мумкин. Бундан ташқари, бу нафақат хавфсиз, балки кодни соддалаштириш ва ўқилишини яхшилашга ёрдам беради.

2. Ушбу турга алоқадор бўлмаган қийматларнинг мантиқий турига трансляция қилиш учун мисоллар келтиринг

Қийинчилик: ⭐️⭐️⭐️

Ушбу саволнинг моҳияти, қайси қийматлар мантиқий турга айлантирилган бўлса, нотўғри ва қайси ҳақиқатга тўғри келишини аниқлашдир.

«Сохта» деб аташ мумкин бўлган қийматлар рўйхати. Улар мантиқий турга ўгирилганда, нотўғри ҳолатга ўтишади:

  • «» (пустая строка).
  • 0, -0, NaN (не-число).
  • null, undefined.

Ушбу рўйхатга киритилмаган ҳар қандай қиймат, мантиқий турга айлантирилганда, ҳақиқий бўлади (бундай қийматлар «ҳақиқий» деб номланади - ҳақиқат). Масалан:

  • «hello».
  • 42.
  • [ ], [ 1, «2», 3 ] (массивлар.
  • { }, { a: 42 } (объектлар).
  • function foo() { .. } (функциялар).

3. IIFE нима?

Қийинчилик: ⭐️⭐️⭐️

IIFE (дарҳол таклиф қилинадиган функция ифодаси) - бу дарҳол чақириладиган функционал ифода. Бундай ибора яратилишдан сўнг дарҳол бажарилади.

(
functionIIFE () { 
console.log( "Hello!" ); 
})(); 
// "Hello!"

Ушбу нақш кўпинча глобал номлар доирасининг ифлосланишини олдини олиш учун ишлатилади. Гап шундаки, ИИФEда эълон қилинган ўзгарувчилар (бошқа ҳар қандай оддий функцияда бўлгани каби) ушбу функциядан ташқарида кўринмасдир.

4. ES6да пайдо бўлган стрелка функцияларидан қачон фойдаланишим керак?

Қийинчилик: ⭐️⭐️⭐️

ЭС6 ва янги стандартларни қўллаб-қувватлайдиган муҳитлар учун кодни ишлаб чиқишда мен амал қиладиган функцияларни эълон қилишнинг турли хил усулларидан фойдаланишнинг оддий қоидалари:

Глобал миқёсда ва Обжест.прототйпе хусусиятлари учун функция калит сўзидан фойдаланинг.

Объект конструкторлари учун функционал калит сўздан фойдаланинг.

Бошқа ҳолларда, ўқ вазифаларидан фойдаланинг.

Кўриниб турибдики, ўқ вазифалари деярли ҳамма жойда ишлатилиши тавсия этилади. Ушбу ҳолатнинг бир нечта сабаблари бор:

Контекст билан қулай иш. Ок функциялари атрофдаги контекстнинг ушбу қийматидан ўзларига эга бўлмаган ҳолда фойдаланади. Агар бундай функциялар кетма-кет, мураккаб функцияларда одатий функциялардан фойдаланмасдан қўлланилса, бу контекст билан хавфсиз ишлашни таъминлайди.

Компактлик. Ўқ функцияси кодини киритиш осон ва ўқиш осонроқ. Эҳтимол, ўқ функцияларининг анъанавий функцияларга нисбатан устунлиги сизга қарама-қарши бўлиб туюлиши мумкин ва ҳар бир аниқ ишлаб чиқувчининг нуқтаи назарига боғлиқ.

Код равшанлиги. Агар деярли барча кодлар стрелка функциялари билан ифодаланган бўлса, ҳар қандай оддий функция ўз контекстини яратиш орқали бундай кодда ажралиб туради. Стрелка функцияларидан фойдаланиб, дастурчи тушунарли кодни яратади, бу эса стрелка функциясисиз код билан ишлаш осонроқ.

5. ES6 синфлари ва функционал конструкторлар ўртасидаги фарқ нима?

Қийинчилик: ⭐️⭐️⭐️

Аввал баъзи мисолларни кўриб чиқайлик.

Конструктор функцияси:

function Person (name) { 
this.name = name; 

ES6 класс:

}
class Person { 
constructor(name) { 
this.name = name;
 } 
}

Оддий объектларни яратиш ҳақида гап кетганда, бу мақсадда ишлатиладиган конструкторлар ва синфлар жуда ўхшаш кўринади.

Қурувчилар ва синфлар ўртасидаги асосий фарқ меросдан фойдаланиш пайтида пайдо бўлади. Агар биз «Одамлар» субкласси бўлган Студент синфини яратиб, ушбу янги синфга студентИд майдонини қўшишимиз керак бўлса, унда бу конструкторлардан ва синфлардан фойдаланадиган коддан иборат бўлади.

Конструктор функцияси:

function Student(name, studentId) { 
// Ундан инициализация қолдирилган майдонларни бошлаш учун суперкласс конструкторини чақирамиз.
Person.call(this, name); 
// Объектнинг ўз майдонларини ишга тушириш.
this.studentId = studentId; } Student.prototype = Object.create(Person.prototype); Student.prototype.constructor = Student;

ES6 класси:

class Student extends Person {

constructor(name, studentId) {

super(name);

this.studentId = studentId;

}

}

Мана, бро, бу ерда JSда сен билмаган саволлар бўлиши ҳам мумкин. Энди ишга кирмоқчи бўлсанг, шуларни ўқиб чиқ. Мақола habr.com дан олинди. Ўзбекчага Google Translateдан таржима қилинди. Ўқи, ўрган ва ярат!

t.me/progerlive