Sobes.tech
Junior

Чӣ тавр тағйирёбандаҳои ношоисташуда (undeclared)?

sobes.tech AI

Ҷавоб аз AI

JavaScriptда номаълум ўзгарувчилар — бу ўзгарувчилар, улар var, let ёки const калит сўзлари билан эълон қилинмаган, аммо уларга қиймат берилган.

// Аниқ эълон қилиш
let эълон қилинганЎзгарувчи = "Мен эълон қилинганман";

// Номаълум тайинлаш (қатъий режимда ёки `'use strict'`да бу ReferenceError хато келтириши мумкин)
// `'use strict'`да бу хатога олиб келади
номаълумЎзгарувчи = "Мен эълон қилинмаганман";

Номаълум ўзгарувчиларнинг ҳаракати кодни ишга тушириш режимига боғлиқ:

  • Қатъий бўлмаган режим: Номаълум ўзгарувчига қиймат тайинлаш, глобал ўзгарувчи яратади, бу Window (браузерлар учун) ичида. Бу ёмон амалиёт ҳисобланади, чунки глобал ҳудудни заҳарлайди ва дебаглашни қийинлаштиради.
  • Қатъий режим ('use strict'): Номаълум ўзгарувчига қиймат тайинлаш ReferenceError хато келтиради. Бу ҳаракат афзалроқ, чунки тасодифий равишда глобал ўзгарувчилар яратилишининг олдини олади ва кодни кўпроқ олдиндан билган ҳолда яратишга ёрдам беради.

Номаълум ўзгарувчининг мавжудлигини текшириш typeof ёрдамида амалга оширилиши мумкин. Қатъий режимда, номаълум ўзгарувчи 'undefined' турида бўлади, шунингдек, эълон қилинган, аммо инициализация қилинмаган ўзгарувчи каби.

let инициализация қилинганЛекинНомаълум;
// console.log(typeof инициализация қилинганЛекинНомаълум); // => 'undefined'

// Қатъий режимда
// номаълумЎзгарувчи = "Текшириш";
// console.log(typeof номаълумЎзгарувчи); // => 'undefined'

// Ўзгарувчининг мавжудлигини текширишдан олдин
if (typeof потенциалНомаълум !== 'undefined') {
    // ПотенциалНомаълум билан ишлаш коди
}

Номаълум ўзгарувчилардан фойдаланиш эҳтимолий хатолар манбаи бўлиб, кодни техник хизмат кўрсатишни қийинлаштиради. Ҳар доим let, const ёки var орқали ўзгарувчиларни аниқ эълон қилиш тавсия этилади (гўёки var ўзининг ўзига хос хусусиятларга эга бўлиб, замонавий кодда let ва const афзалроқ). 'use strict' режимидан фойдаланиш бу каби муаммоларни олдини олиш учун стандарт амалиёт ҳисобланади.