{
  "assessmentTests": {
    "javascript_test": {
      "name": "Gwajin JavaScript",
      "desc": "Tambayoyi 30 na yanayi kan ainihin tsarin rubutu da tilastawa, ayyuka/iyaka/rufewa da wannan, abubuwa/jeri da tsarin bayanai, da kuma madauki na taron/async/samfurin samfuri — gano ko JavaScript ɗinku ya dace da abin da tallan aiki ke nufi da ƙwarewar JavaScript.",
      "recommendation": "Bayanin martabar gwanintar ku na JavaScript",
      "results": {
        "beginner": {
          "name": "Mai farawa",
          "desc": "Kuna iya rubuta ayyuka da abubuwa masu aiki, amma tambayoyin da kuka kasa amsawa sun fi mayar da hankali kan tilasta nau'i da ma'anar ishara maimakon tsarin rubutu — == yana canza nau'ikan a hankali kafin kwatantawa, aikin jeri wanda ke raba abu ɗaya maimakon kwafinsa, dalilin da yasa NaN ba ya taɓa daidaita da kansa. Babu ɗaya daga cikin wannan da ke nufin ba ku da kyau a JavaScript; waɗannan su ne takamaiman dokokin da ke rikitar da mutanen da suka koyi yaren ta hanyar rubuta lambar da ta faru da aiki maimakon koyon yadda dabi'u da isharori suke aiki a zahiri. Suna da mahimmanci a wurin aiki saboda kowannensu shine inda lamba ke aiki ba tare da kuskure ba amma har yanzu tana yin abin da ba daidai ba.",
          "recommendation": "Fara da abubuwa uku, a cikin wannan tsari: dalilin da yasa == ke tilasta nau'ikan kafin kwatantawa yayin da === ba ya yi, dalilin da yasa sanya jeri ɗaya ko abu zuwa sabon mai canji yana kwafin isharar maimakon darajar, da kuma yadda ake ɗaga var kuma a fara shi zuwa undefined yayin da let da const ke zama a cikin yankin mutuwa na wucin gadi har sai an aiwatar da sanarwarsu. Jagorar JavaScript ta MDN ta ƙunshi duka ukun tare da misalai masu aiki."
        },
        "intermediate": {
          "name": "Matsakaici",
          "desc": "Kuna iya sarrafa lambar aikace-aikacen yau da kullun cikin sauƙi — ayyuka, hanyoyin jeri, kwararar sarrafawa kai tsaye — kuma aikin fasali na yau da kullun ba zai rage muku gudu ba. Bambancin da ke tsakanin nan da Babba galibi yana cikin abin da ke faruwa lokacin da dokokin iyaka da lokaci na JavaScript suka yi hulɗa: var da aka kama a cikin madaukai na madauki duk suna karanta darajar ƙarshe iri ɗaya, this wanda a hankali ya daina nuna abu da zarar an cire hanya daga gare shi, kwafin da aka yada wanda yake da zurfi amma yana kwafin mataki ɗaya ne kawai. Waɗannan su ne irin kurakuran da ke wuce karatu mai sauri kuma suna bayyana ne kawai a ƙarƙashin takamaiman yanayin aiki.",
          "recommendation": "Mayar da hankali kan yadda iyaka da this suke warwarewa a lokacin kira maimakon lokacin ma'ana: dalilin da yasa madauki na for mai tushen var ke ba kowane kira baya darajar ƙidaya ta ƙarshe iri ɗaya yayin da let ba ya yi, yadda ake ƙayyade this ta yadda ake kiran aiki maimakon inda aka rubuta shi, da kuma dalilin da yasa yada ko Object.assign ke kwafin matakin sama na abu ne kawai. Sannan madaukin taron, tunda wannan shine abin da ke rikitar da mutanen da suka riga sun san alƙawura daban-daban."
        },
        "advanced": {
          "name": "Babbar Kwarewa",
          "desc": "Wannan shine matakin da yawancin tallace-tallacen aiki ke nufi da “ƙwararren JavaScript.” Kuna karanta jerin filter/map/reduce kuma kuna iya hasashen ainihin abin da zai dawo ba tare da canza jerin asali ba, kun san dalilin da yasa console.log mai aiki tare koyaushe yana doke microtask wanda koyaushe yana doke setTimeout, kuma kuna kaiwa ga Promise.all da sanin cewa yana ƙin nan da nan da zarar kowane alƙawari ɗaya ya yi maimakon jiran sauran. Abin da ya raba wannan rukuni da na sama shine samfuri da gefen samfurin abu na aikin: yadda jerin samfuri ke warware hanyar gado da hasOwnProperty, da kuma abin da filin aji na sirri yake ɓoyewa a zahiri.",
          "recommendation": "Tura zuwa sassan da ke kare yanayin da sauran lambar ma ke taɓawa: yadda jerin samfuri na JavaScript ke warware binciken hanyar da ba a kan misalin kanta ba, abin da filayen # na sirri na aji ke ɓoyewa daga samun dama daga waje, da kuma yadda JSON.stringify ke bi da undefined da ayyuka daban-daban a cikin abu mai sauƙi da kuma a cikin jeri. Kayan MDN akan madaukin taron da jerin samfuri shine tasha ta gaba ta halitta ga duka biyun."
        },
        "expert": {
          "name": "Gwani",
          "desc": "Kun sami maki mafi girma a kowane sashe — ainihin tsarin rubutu, nau'ikan da tilastawa; ayyuka, iyaka, rufewa da this; abubuwa, jeri da tsarin bayanai; da async, madaukin taron, samfura da karin magana. A aikace, wannan yana nufin za a iya ba ku aikin wani kuma ku bayyana dalilin da yasa yake dawo da abin da yake dawowa, ba kawai abin da tsarin rubutu ya ce ya kamata ya yi ba, wanda shine gwaninta mafi wahala kuma mafi daraja. A wannan matakin yaren kansa da wuya ya zama abin da ke iyakancewa; iyakancewar yawanci ita ce kwararar sarrafawa ta async ko siffar bayanan da ke ƙarƙashinta.",
          "recommendation": "Sakamakon yanzu yana cikin ƙira da ganowa: yin tunani game da yanayin tsere tsakanin Promise.all da Promise.race maimakon maimaita ma'anoninsu, zaɓar lokacin da rufewa shine kayan aiki da ya dace don yanayin sirri da kuma lokacin da filin sirri na aji ya dace, da kuma karanta kuskuren tsari na microtask-vs-macrotask a cikin bayanan samarwa maimakon a cikin tambayoyi. Idan ana tantance ku don wani matsayi, ku bayyana kuskuren lokaci da kuka samu — mai canjin rufewa da ya tsufa ko kiran baya na async da ba a tsara shi ba — maimakon ambaton fasalulluka na JavaScript; yana nuna tunani, ba kawai ƙamus ba."
        }
      },
      "questions": [
        {
          "question": "console.log(x);\nvar x = 5;\nMenene wannan ke bugawa?",
          "options": [
            {
              "icon": "",
              "label": "5"
            },
            {
              "icon": "",
              "label": "ReferenceError: ba a ayyana x ba"
            },
            {
              "icon": "",
              "label": "undefined"
            },
            {
              "icon": "",
              "label": "null"
            }
          ]
        },
        {
          "question": "console.log(y);\nlet y = 5;\nMenene zai faru?",
          "options": [
            {
              "icon": "",
              "label": "Yana jefa ReferenceError"
            },
            {
              "icon": "",
              "label": "Yana buga undefined"
            },
            {
              "icon": "",
              "label": "Yana buga 5"
            },
            {
              "icon": "",
              "label": "Yana jefa SyntaxError"
            }
          ]
        },
        {
          "question": "const arr = [1, 2, 3];\narr.push(4);\nconsole.log(arr.length);\nMenene wannan ke bugawa?",
          "options": [
            {
              "icon": "",
              "label": "4"
            },
            {
              "icon": "",
              "label": "Yana jefa TypeError"
            },
            {
              "icon": "",
              "label": "3"
            },
            {
              "icon": "",
              "label": "undefined"
            }
          ]
        },
        {
          "question": "console.log('' == 0);\nconsole.log('' === 0);\nMenene layuka biyu suke bugawa?",
          "options": [
            {
              "icon": "",
              "label": "gaskiya sannan gaskiya"
            },
            {
              "icon": "",
              "label": "ƙarya sannan ƙarya"
            },
            {
              "icon": "",
              "label": "gaskiya sannan ƙarya"
            },
            {
              "icon": "",
              "label": "Yana jefa TypeError"
            }
          ]
        },
        {
          "question": "console.log(NaN === NaN);\nconsole.log(Number.isNaN(NaN));\nMenene layuka biyu suke bugawa?",
          "options": [
            {
              "icon": "",
              "label": "gaskiya sannan gaskiya"
            },
            {
              "icon": "",
              "label": "Yana jefa TypeError"
            },
            {
              "icon": "",
              "label": "ƙarya sannan ƙarya"
            },
            {
              "icon": "",
              "label": "ƙarya sannan gaskiya"
            }
          ]
        },
        {
          "question": "console.log(typeof null);\nMenene wannan ke bugawa?",
          "options": [
            {
              "icon": "",
              "label": "\"null\""
            },
            {
              "icon": "",
              "label": "\"object\""
            },
            {
              "icon": "",
              "label": "\"undefined\""
            },
            {
              "icon": "",
              "label": "\"boolean\""
            }
          ]
        },
        {
          "question": "Wanne daga cikin masu zuwa ne gaskiya idan aka yi amfani da shi a cikin yanayin if?",
          "options": [
            {
              "icon": "",
              "label": "0"
            },
            {
              "icon": "",
              "label": "““ (kirtani mara komai)"
            },
            {
              "icon": "",
              "label": "null"
            },
            {
              "icon": "",
              "label": "“0” (kirtani sifili)"
            }
          ]
        },
        {
          "question": "foo();\nfunction foo() { console.log('a'); }\nbar();\nvar bar = function() { console.log('b'); };\nMenene zai faru?",
          "options": [
            {
              "icon": "",
              "label": "Duk kiran biyu suna bugawa: “a” sannan “b”"
            },
            {
              "icon": "",
              "label": "foo() yana buga “a”; bar() yana jefa TypeError"
            },
            {
              "icon": "",
              "label": "foo() da bar() dukansu suna jefa ReferenceError"
            },
            {
              "icon": "",
              "label": "foo() yana jefa ReferenceError; bar() yana buga “b”"
            }
          ]
        },
        {
          "question": "function makeCounter() {\n  let count = 0;\n  return function() { count++; return count; };\n}\nconst counter = makeCounter();\nconsole.log(counter());\nconsole.log(counter());\nMenene layuka biyu suke bugawa?",
          "options": [
            {
              "icon": "",
              "label": "1 sannan 1"
            },
            {
              "icon": "",
              "label": "NaN sannan NaN"
            },
            {
              "icon": "",
              "label": "undefined sannan undefined"
            },
            {
              "icon": "",
              "label": "1 sannan 2"
            }
          ]
        },
        {
          "question": "for (var i = 0; i < 3; i++) {\n  setTimeout(() => console.log(i), 0);\n}\nMenene wannan ke bugawa?",
          "options": [
            {
              "icon": "",
              "label": "0, 1, 2"
            },
            {
              "icon": "",
              "label": "3, 3, 3"
            },
            {
              "icon": "",
              "label": "Yana jefa ReferenceError"
            },
            {
              "icon": "",
              "label": "undefined, undefined, undefined"
            }
          ]
        },
        {
          "question": "for (let i = 0; i < 3; i++) {\n  setTimeout(() => console.log(i), 0);\n}\nMenene wannan ke bugawa?",
          "options": [
            {
              "icon": "",
              "label": "3, 3, 3"
            },
            {
              "icon": "",
              "label": "Yana jefa ReferenceError"
            },
            {
              "icon": "",
              "label": "undefined, undefined, undefined"
            },
            {
              "icon": "",
              "label": "0, 1, 2"
            }
          ]
        },
        {
          "question": "function greet() { return `Hi, ${this.name}`; }\nconst person = { name: 'Ana' };\nconsole.log(greet.call(person));\nMenene wannan ke bugawa?",
          "options": [
            {
              "icon": "",
              "label": "“Hi, Ana”"
            },
            {
              "icon": "",
              "label": "“Hi, undefined”"
            },
            {
              "icon": "",
              "label": "Yana jefa TypeError"
            },
            {
              "icon": "",
              "label": "“Hi, ${this.name}”"
            }
          ]
        },
        {
          "question": "const timer = {\n  seconds: 0,\n  start: function() {\n    setInterval(() => { this.seconds++; }, 1000);\n  },\n};\nMe yasa mutane suka fi son aikin kibiya akan function() { this.seconds++ } a cikin setInterval a nan?",
          "options": [
            {
              "icon": "",
              "label": "Ayyukan kibiya suna amfani da this na start, wanda shine timer"
            },
            {
              "icon": "",
              "label": "Ayyukan kibiya suna aiki da sauri fiye da ayyukan yau da kullun"
            },
            {
              "icon": "",
              "label": "Ayyukan kibiya suna ɗaure wannan ga abin duniya"
            },
            {
              "icon": "",
              "label": "Ayyukan kibiya suna mayar da wannan zuwa madaidaicin duniya"
            }
          ]
        },
        {
          "question": "function multiply(a, b) { return a * b; }\nconst double = multiply.bind(null, 2);\nconsole.log(double(5));\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "5"
            },
            {
              "icon": "",
              "label": "10"
            },
            {
              "icon": "",
              "label": "NaN"
            },
            {
              "icon": "",
              "label": "7"
            }
          ]
        },
        {
          "question": "function outer() {\n  let x = 10;\n  function inner() {\n    let x = 20;\n    console.log(x);\n  }\n  inner();\n  console.log(x);\n}\nouter();\nMe kiran console.log guda biyu zasu buga?",
          "options": [
            {
              "icon": "",
              "label": "20 sannan 20"
            },
            {
              "icon": "",
              "label": "20 sannan 10"
            },
            {
              "icon": "",
              "label": "10 sannan 10"
            },
            {
              "icon": "",
              "label": "Yana jefa SyntaxError"
            }
          ]
        },
        {
          "question": "const a = [1, 2, 3];\nconst b = a;\nb.push(4);\nconsole.log(a.length);\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "3"
            },
            {
              "icon": "",
              "label": "undefined"
            },
            {
              "icon": "",
              "label": "Yana jefa TypeError"
            },
            {
              "icon": "",
              "label": "4"
            }
          ]
        },
        {
          "question": "const original = { name: 'Ana', tags: ['x', 'y'] };\nconst copy = { ...original };\ncopy.name = 'Bea';\ncopy.tags.push('z');\nconsole.log(original.name, original.tags.length);\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "'Ana' 2"
            },
            {
              "icon": "",
              "label": "'Ana' 3"
            },
            {
              "icon": "",
              "label": "'Bea' 3"
            },
            {
              "icon": "",
              "label": "'Bea' 2"
            }
          ]
        },
        {
          "question": "const { a: x = 10, b: y = 20 } = { a: 5 };\nconsole.log(x, y);\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "undefined undefined"
            },
            {
              "icon": "",
              "label": "5 undefined"
            },
            {
              "icon": "",
              "label": "10 20"
            },
            {
              "icon": "",
              "label": "5 20"
            }
          ]
        },
        {
          "question": "const [first, ...rest] = [1, 2, 3, 4];\nconsole.log(rest);\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "[1, 2, 3, 4]"
            },
            {
              "icon": "",
              "label": "[2, 3, 4]"
            },
            {
              "icon": "",
              "label": "2"
            },
            {
              "icon": "",
              "label": "[1]"
            }
          ]
        },
        {
          "question": "const nums = [10, 1, 2];\nnums.sort();\nconsole.log(nums);\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "[1, 2, 10]"
            },
            {
              "icon": "",
              "label": "[10, 1, 2]"
            },
            {
              "icon": "",
              "label": "[1, 10, 2]"
            },
            {
              "icon": "",
              "label": "[2, 1, 10]"
            }
          ]
        },
        {
          "question": "const user = { profile: { age: 0 } };\nconsole.log(user.profile?.age ?? 'unknown');\nconsole.log(user.address?.city ?? 'unknown');\nMe layukan biyu zasu buga?",
          "options": [
            {
              "icon": "",
              "label": "'unknown' sannan 'unknown'"
            },
            {
              "icon": "",
              "label": "0 sannan 'unknown'"
            },
            {
              "icon": "",
              "label": "0 sannan undefined"
            },
            {
              "icon": "",
              "label": "'unknown' sannan 0"
            }
          ]
        },
        {
          "question": "const obj = { a: undefined, b: function(){}, c: NaN, d: [undefined, function(){}, 1] };\nconsole.log(JSON.stringify(obj));\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "'{\"a\":null,\"b\":null,\"c\":null,\"d\":[null,null,1]}'"
            },
            {
              "icon": "",
              "label": "'{\"c\":NaN,\"d\":[1]}'"
            },
            {
              "icon": "",
              "label": "'{\"c\":null,\"d\":[null,null,1]}'"
            },
            {
              "icon": "",
              "label": "Yana jefa TypeError"
            }
          ]
        },
        {
          "question": "console.log('1');\nsetTimeout(() => console.log('2'), 0);\nPromise.resolve().then(() => console.log('3'));\nconsole.log('4');\nWane tsari waɗannan zasu buga?",
          "options": [
            {
              "icon": "",
              "label": "1, 2, 3, 4"
            },
            {
              "icon": "",
              "label": "1, 4, 2, 3"
            },
            {
              "icon": "",
              "label": "1, 4, 3, 2"
            },
            {
              "icon": "",
              "label": "1, 3, 4, 2"
            }
          ]
        },
        {
          "question": "async function foo() {\n  console.log('a');\n  await null;\n  console.log('b');\n}\nconsole.log('start');\nfoo();\nconsole.log('end');\nWane tsari waɗannan zasu buga?",
          "options": [
            {
              "icon": "",
              "label": "start, a, end, b"
            },
            {
              "icon": "",
              "label": "start, a, b, end"
            },
            {
              "icon": "",
              "label": "start, end, a, b"
            },
            {
              "icon": "",
              "label": "a, start, end, b"
            }
          ]
        },
        {
          "question": "Promise.all([\n  Promise.resolve(1),\n  Promise.reject('err'),\n  Promise.resolve(3),\n]).then(r => console.log('ok', r)).catch(e => console.log('fail', e));\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "'fail err'"
            },
            {
              "icon": "",
              "label": "'ok' [1, 3]"
            },
            {
              "icon": "",
              "label": "'ok' [1, undefined, 3]"
            },
            {
              "icon": "",
              "label": "Yana jefa kuskure, kuma babu mai sarrafawa da ke aiki"
            }
          ]
        },
        {
          "question": "const fast = new Promise(res => setTimeout(() => res('fast'), 10));\nconst slow = new Promise(res => setTimeout(() => res('slow'), 100));\nPromise.race([fast, slow]).then(v => console.log(v));\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "'slow'"
            },
            {
              "icon": "",
              "label": "['fast', 'slow']"
            },
            {
              "icon": "",
              "label": "'fast'"
            },
            {
              "icon": "",
              "label": "Yana jefa TypeError"
            }
          ]
        },
        {
          "question": "function Animal(name) { this.name = name; }\nAnimal.prototype.speak = function() { return `${this.name} makes a sound`; };\nconst dog = new Animal('Rex');\nconsole.log(dog.speak());\nconsole.log(dog.hasOwnProperty('speak'));\nMe layukan biyu zasu buga?",
          "options": [
            {
              "icon": "",
              "label": "'Rex makes a sound' sannan true"
            },
            {
              "icon": "",
              "label": "undefined sannan false"
            },
            {
              "icon": "",
              "label": "Yana jefa TypeError"
            },
            {
              "icon": "",
              "label": "'Rex makes a sound' sannan false"
            }
          ]
        },
        {
          "question": "class Counter {\n  #count = 0;\n  increment() { this.#count++; return this.#count; }\n}\nconst c = new Counter();\nconsole.log(c.increment());\nconsole.log(c.count);\nMe layukan biyu zasu buga?",
          "options": [
            {
              "icon": "",
              "label": "1 sannan undefined"
            },
            {
              "icon": "",
              "label": "1 sannan 0"
            },
            {
              "icon": "",
              "label": "1 sannan 1"
            },
            {
              "icon": "",
              "label": "Yana jefa SyntaxError"
            }
          ]
        },
        {
          "question": "const items = ['a', 'b'];\nconst label = `Items: ${items.length > 0 ? items.join(', ') : 'none'}`;\nconsole.log(label);\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "'Items: ${items.length > 0 ? items.join(\\', \\') : \\'none\\'}'"
            },
            {
              "icon": "",
              "label": "'Items: none'"
            },
            {
              "icon": "",
              "label": "'Items: a, b'"
            },
            {
              "icon": "",
              "label": "Yana jefa SyntaxError"
            }
          ]
        },
        {
          "question": "const nums = [1, 2, 3, 4, 5];\nconst result = nums.filter(n => n % 2 === 0).map(n => n * 10).reduce((sum, n) => sum + n, 0);\nconsole.log(result, nums);\nMe wannan zai buga?",
          "options": [
            {
              "icon": "",
              "label": "60 [1, 2, 3, 4, 5]"
            },
            {
              "icon": "",
              "label": "60 [2, 4, 20, 40]"
            },
            {
              "icon": "",
              "label": "150 [1, 2, 3, 4, 5]"
            },
            {
              "icon": "",
              "label": "60 [20, 40]"
            }
          ]
        }
      ],
      "optionOrderVersion": "7335aa056fc9d33a"
    }
  },
  "testNames": {
    "javascript-test": "Gwajin JavaScript"
  }
}
