{"id":"0cbdaff8-29c8-43e4-968e-b3b2b63f5845","shortId":"sfYLjW","kind":"skill","title":"javascript-mastery","tagline":"33+ essential JavaScript concepts every developer should know, inspired by [33-js-concepts](https://github.com/leonardomso/33-js-concepts).","description":"# 🧠 JavaScript Mastery\n\n> 33+ essential JavaScript concepts every developer should know, inspired by [33-js-concepts](https://github.com/leonardomso/33-js-concepts).\n\n## When to Use This Skill\n\nUse this skill when:\n\n- Explaining JavaScript concepts\n- Debugging tricky JS behavior\n- Teaching JavaScript fundamentals\n- Reviewing code for JS best practices\n- Understanding language quirks\n\n---\n\n## 1. Fundamentals\n\n### 1.1 Primitive Types\n\nJavaScript has 7 primitive types:\n\n```javascript\n// String\nconst str = \"hello\";\n\n// Number (integers and floats)\nconst num = 42;\nconst float = 3.14;\n\n// BigInt (for large integers)\nconst big = 9007199254740991n;\n\n// Boolean\nconst bool = true;\n\n// Undefined\nlet undef; // undefined\n\n// Null\nconst empty = null;\n\n// Symbol (unique identifiers)\nconst sym = Symbol(\"description\");\n```\n\n**Key points**:\n\n- Primitives are immutable\n- Passed by value\n- `typeof null === \"object\"` is a historical bug\n\n### 1.2 Type Coercion\n\nJavaScript implicitly converts types:\n\n```javascript\n// String coercion\n\"5\" + 3; // \"53\" (number → string)\n\"5\" - 3; // 2    (string → number)\n\n// Boolean coercion\nBoolean(\"\"); // false\nBoolean(\"hello\"); // true\nBoolean(0); // false\nBoolean([]); // true (!)\n\n// Equality coercion\n\"5\" == 5; // true  (coerces)\n\"5\" === 5; // false (strict)\n```\n\n**Falsy values** (8 total):\n`false`, `0`, `-0`, `0n`, `\"\"`, `null`, `undefined`, `NaN`\n\n### 1.3 Equality Operators\n\n```javascript\n// == (loose equality) - coerces types\nnull == undefined; // true\n\"1\" == 1; // true\n\n// === (strict equality) - no coercion\nnull === undefined; // false\n\"1\" === 1; // false\n\n// Object.is() - handles edge cases\nObject.is(NaN, NaN); // true (NaN === NaN is false!)\nObject.is(-0, 0); // false (0 === -0 is true!)\n```\n\n**Rule**: Always use `===` unless you have a specific reason not to.\n\n---\n\n## 2. Scope & Closures\n\n### 2.1 Scope Types\n\n```javascript\n// Global scope\nvar globalVar = \"global\";\n\nfunction outer() {\n  // Function scope\n  var functionVar = \"function\";\n\n  if (true) {\n    // Block scope (let/const only)\n    let blockVar = \"block\";\n    const alsoBlock = \"block\";\n    var notBlock = \"function\"; // var ignores blocks!\n  }\n}\n```\n\n### 2.2 Closures\n\nA closure is a function that remembers its lexical scope:\n\n```javascript\nfunction createCounter() {\n  let count = 0; // \"closed over\" variable\n\n  return {\n    increment() {\n      return ++count;\n    },\n    decrement() {\n      return --count;\n    },\n    getCount() {\n      return count;\n    },\n  };\n}\n\nconst counter = createCounter();\ncounter.increment(); // 1\ncounter.increment(); // 2\ncounter.getCount(); // 2\n```\n\n**Common use cases**:\n\n- Data privacy (module pattern)\n- Function factories\n- Partial application\n- Memoization\n\n### 2.3 var vs let vs const\n\n```javascript\n// var - function scoped, hoisted, can redeclare\nvar x = 1;\nvar x = 2; // OK\n\n// let - block scoped, hoisted (TDZ), no redeclare\nlet y = 1;\n// let y = 2; // Error!\n\n// const - like let, but can't reassign\nconst z = 1;\n// z = 2; // Error!\n\n// BUT: const objects are mutable\nconst obj = { a: 1 };\nobj.a = 2; // OK\nobj.b = 3; // OK\n```\n\n---\n\n## 3. Functions & Execution\n\n### 3.1 Call Stack\n\n```javascript\nfunction first() {\n  console.log(\"first start\");\n  second();\n  console.log(\"first end\");\n}\n\nfunction second() {\n  console.log(\"second\");\n}\n\nfirst();\n// Output:\n// \"first start\"\n// \"second\"\n// \"first end\"\n```\n\nStack overflow example:\n\n```javascript\nfunction infinite() {\n  infinite(); // No base case!\n}\ninfinite(); // RangeError: Maximum call stack size exceeded\n```\n\n### 3.2 Hoisting\n\n```javascript\n// Variable hoisting\nconsole.log(a); // undefined (hoisted, not initialized)\nvar a = 5;\n\nconsole.log(b); // ReferenceError (TDZ)\nlet b = 5;\n\n// Function hoisting\nsayHi(); // Works!\nfunction sayHi() {\n  console.log(\"Hi!\");\n}\n\n// Function expressions don't hoist\nsayBye(); // TypeError\nvar sayBye = function () {\n  console.log(\"Bye!\");\n};\n```\n\n### 3.3 this Keyword\n\n```javascript\n// Global context\nconsole.log(this); // window (browser) or global (Node)\n\n// Object method\nconst obj = {\n  name: \"Alice\",\n  greet() {\n    console.log(this.name); // \"Alice\"\n  },\n};\n\n// Arrow functions (lexical this)\nconst obj2 = {\n  name: \"Bob\",\n  greet: () => {\n    console.log(this.name); // undefined (inherits outer this)\n  },\n};\n\n// Explicit binding\nfunction greet() {\n  console.log(this.name);\n}\ngreet.call({ name: \"Charlie\" }); // \"Charlie\"\ngreet.apply({ name: \"Diana\" }); // \"Diana\"\nconst bound = greet.bind({ name: \"Eve\" });\nbound(); // \"Eve\"\n```\n\n---\n\n## 4. Event Loop & Async\n\n### 4.1 Event Loop\n\n```javascript\nconsole.log(\"1\");\n\nsetTimeout(() => console.log(\"2\"), 0);\n\nPromise.resolve().then(() => console.log(\"3\"));\n\nconsole.log(\"4\");\n\n// Output: 1, 4, 3, 2\n// Why? Microtasks (Promises) run before macrotasks (setTimeout)\n```\n\n**Execution order**:\n\n1. Synchronous code (call stack)\n2. Microtasks (Promise callbacks, queueMicrotask)\n3. Macrotasks (setTimeout, setInterval, I/O)\n\n### 4.2 Callbacks\n\n```javascript\n// Callback pattern\nfunction fetchData(callback) {\n  setTimeout(() => {\n    callback(null, { data: \"result\" });\n  }, 1000);\n}\n\n// Error-first convention\nfetchData((error, result) => {\n  if (error) {\n    console.error(error);\n    return;\n  }\n  console.log(result);\n});\n\n// Callback hell (avoid this!)\ngetData((data) => {\n  processData(data, (processed) => {\n    saveData(processed, (saved) => {\n      notify(saved, () => {\n        // 😱 Pyramid of doom\n      });\n    });\n  });\n});\n```\n\n### 4.3 Promises\n\n```javascript\n// Creating a Promise\nconst promise = new Promise((resolve, reject) => {\n  setTimeout(() => {\n    resolve(\"Success!\");\n    // or: reject(new Error(\"Failed!\"));\n  }, 1000);\n});\n\n// Consuming Promises\npromise\n  .then((result) => console.log(result))\n  .catch((error) => console.error(error))\n  .finally(() => console.log(\"Done\"));\n\n// Promise combinators\nPromise.all([p1, p2, p3]); // All must succeed\nPromise.allSettled([p1, p2]); // Wait for all, get status\nPromise.race([p1, p2]); // First to settle\nPromise.any([p1, p2]); // First to succeed\n```\n\n### 4.4 async/await\n\n```javascript\nasync function fetchUserData(userId) {\n  try {\n    const response = await fetch(`/api/users/${userId}`);\n    if (!response.ok) throw new Error(\"Failed to fetch\");\n    const user = await response.json();\n    return user;\n  } catch (error) {\n    console.error(\"Error:\", error);\n    throw error; // Re-throw for caller to handle\n  }\n}\n\n// Parallel execution\nasync function fetchAll() {\n  const [users, posts] = await Promise.all([\n    fetch(\"/api/users\"),\n    fetch(\"/api/posts\"),\n  ]);\n  return { users, posts };\n}\n```\n\n---\n\n## 5. Functional Programming\n\n### 5.1 Higher-Order Functions\n\nFunctions that take or return functions:\n\n```javascript\n// Takes a function\nconst numbers = [1, 2, 3];\nconst doubled = numbers.map((n) => n * 2); // [2, 4, 6]\n\n// Returns a function\nfunction multiply(a) {\n  return function (b) {\n    return a * b;\n  };\n}\nconst double = multiply(2);\ndouble(5); // 10\n```\n\n### 5.2 Pure Functions\n\n```javascript\n// Pure: same input → same output, no side effects\nfunction add(a, b) {\n  return a + b;\n}\n\n// Impure: modifies external state\nlet total = 0;\nfunction addToTotal(value) {\n  total += value; // Side effect!\n  return total;\n}\n\n// Impure: depends on external state\nfunction getDiscount(price) {\n  return price * globalDiscountRate; // External dependency\n}\n```\n\n### 5.3 map, filter, reduce\n\n```javascript\nconst users = [\n  { name: \"Alice\", age: 25 },\n  { name: \"Bob\", age: 30 },\n  { name: \"Charlie\", age: 35 },\n];\n\n// map: transform each element\nconst names = users.map((u) => u.name);\n// [\"Alice\", \"Bob\", \"Charlie\"]\n\n// filter: keep elements matching condition\nconst adults = users.filter((u) => u.age >= 30);\n// [{ name: \"Bob\", ... }, { name: \"Charlie\", ... }]\n\n// reduce: accumulate into single value\nconst totalAge = users.reduce((sum, u) => sum + u.age, 0);\n// 90\n\n// Chaining\nconst result = users\n  .filter((u) => u.age >= 30)\n  .map((u) => u.name)\n  .join(\", \");\n// \"Bob, Charlie\"\n```\n\n### 5.4 Currying & Composition\n\n```javascript\n// Currying: transform f(a, b, c) into f(a)(b)(c)\nconst curry = (fn) => {\n  return function curried(...args) {\n    if (args.length >= fn.length) {\n      return fn.apply(this, args);\n    }\n    return (...moreArgs) => curried(...args, ...moreArgs);\n  };\n};\n\nconst add = curry((a, b, c) => a + b + c);\nadd(1)(2)(3); // 6\nadd(1, 2)(3); // 6\nadd(1)(2, 3); // 6\n\n// Composition: combine functions\nconst compose =\n  (...fns) =>\n  (x) =>\n    fns.reduceRight((acc, fn) => fn(acc), x);\n\nconst pipe =\n  (...fns) =>\n  (x) =>\n    fns.reduce((acc, fn) => fn(acc), x);\n\nconst addOne = (x) => x + 1;\nconst double = (x) => x * 2;\n\nconst addThenDouble = compose(double, addOne);\naddThenDouble(5); // 12 = (5 + 1) * 2\n\nconst doubleThenAdd = pipe(double, addOne);\ndoubleThenAdd(5); // 11 = (5 * 2) + 1\n```\n\n---\n\n## 6. Objects & Prototypes\n\n### 6.1 Prototypal Inheritance\n\n```javascript\n// Prototype chain\nconst animal = {\n  speak() {\n    console.log(\"Some sound\");\n  },\n};\n\nconst dog = Object.create(animal);\ndog.bark = function () {\n  console.log(\"Woof!\");\n};\n\ndog.speak(); // \"Some sound\" (inherited)\ndog.bark(); // \"Woof!\" (own method)\n\n// ES6 Classes (syntactic sugar)\nclass Animal {\n  speak() {\n    console.log(\"Some sound\");\n  }\n}\n\nclass Dog extends Animal {\n  bark() {\n    console.log(\"Woof!\");\n  }\n}\n```\n\n### 6.2 Object Methods\n\n```javascript\nconst obj = { a: 1, b: 2 };\n\n// Keys, values, entries\nObject.keys(obj); // [\"a\", \"b\"]\nObject.values(obj); // [1, 2]\nObject.entries(obj); // [[\"a\", 1], [\"b\", 2]]\n\n// Shallow copy\nconst copy = { ...obj };\nconst copy2 = Object.assign({}, obj);\n\n// Freeze (immutable)\nconst frozen = Object.freeze({ x: 1 });\nfrozen.x = 2; // Silently fails (or throws in strict mode)\n\n// Seal (no add/delete, can modify)\nconst sealed = Object.seal({ x: 1 });\nsealed.x = 2; // OK\nsealed.y = 3; // Fails\ndelete sealed.x; // Fails\n```\n\n---\n\n## 7. Modern JavaScript (ES6+)\n\n### 7.1 Destructuring\n\n```javascript\n// Array destructuring\nconst [first, second, ...rest] = [1, 2, 3, 4, 5];\n// first = 1, second = 2, rest = [3, 4, 5]\n\n// Object destructuring\nconst { name, age, city = \"Unknown\" } = { name: \"Alice\", age: 25 };\n// name = \"Alice\", age = 25, city = \"Unknown\"\n\n// Renaming\nconst { name: userName } = { name: \"Bob\" };\n// userName = \"Bob\"\n\n// Nested\nconst {\n  address: { street },\n} = { address: { street: \"123 Main\" } };\n```\n\n### 7.2 Spread & Rest\n\n```javascript\n// Spread: expand iterable\nconst arr1 = [1, 2, 3];\nconst arr2 = [...arr1, 4, 5]; // [1, 2, 3, 4, 5]\n\nconst obj1 = { a: 1 };\nconst obj2 = { ...obj1, b: 2 }; // { a: 1, b: 2 }\n\n// Rest: collect remaining\nfunction sum(...numbers) {\n  return numbers.reduce((a, b) => a + b, 0);\n}\nsum(1, 2, 3, 4); // 10\n```\n\n### 7.3 Modules\n\n```javascript\n// Named exports\nexport const PI = 3.14159;\nexport function square(x) {\n  return x * x;\n}\n\n// Default export\nexport default class Calculator {}\n\n// Importing\nimport Calculator, { PI, square } from \"./math.js\";\nimport * as math from \"./math.js\";\n\n// Dynamic import\nconst module = await import(\"./dynamic.js\");\n```\n\n### 7.4 Optional Chaining & Nullish Coalescing\n\n```javascript\n// Optional chaining (?.)\nconst user = { address: { city: \"NYC\" } };\nconst city = user?.address?.city; // \"NYC\"\nconst zip = user?.address?.zip; // undefined (no error)\nconst fn = user?.getName?.(); // undefined if no method\n\n// Nullish coalescing (??)\nconst value = null ?? \"default\"; // \"default\"\nconst zero = 0 ?? \"default\"; // 0 (not nullish!)\nconst empty = \"\" ?? \"default\"; // \"\" (not nullish!)\n\n// Compare with ||\nconst value2 = 0 || \"default\"; // \"default\" (0 is falsy)\n```\n\n---\n\n## Quick Reference Card\n\n| Concept        | Key Point                         |\n| :------------- | :-------------------------------- |\n| `==` vs `===`  | Always use `===`                  |\n| `var` vs `let` | Prefer `let`/`const`              |\n| Closures       | Function + lexical scope          |\n| `this`         | Depends on how function is called |\n| Event loop     | Microtasks before macrotasks      |\n| Pure functions | Same input → same output          |\n| Prototypes     | `__proto__` → prototype chain     |\n| `??` vs `\\|\\|` | `??` only checks null/undefined   |\n\n---\n\n## Resources\n\n- [33 JS Concepts](https://github.com/leonardomso/33-js-concepts)\n- [JavaScript.info](https://javascript.info/)\n- [MDN JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide)\n- [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS)\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["javascript","mastery","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-javascript-mastery","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/javascript-mastery","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34997 github stars · SKILL.md body (12,773 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T06:51:22.642Z","embedding":null,"createdAt":"2026-04-18T20:38:46.648Z","updatedAt":"2026-04-25T06:51:22.642Z","lastSeenAt":"2026-04-25T06:51:22.642Z","tsv":"'-0':182,224,228 '/)':1432 '/api/posts':750 '/api/users':707,748 '/dynamic.js':1312 '/en-us/docs/web/javascript/guide)':1438 '/getify/you-dont-know-js)':1446 '/leonardomso/33-js-concepts)':1428 '/leonardomso/33-js-concepts).':20,39 '/math.js':1300,1305 '0':162,181,225,227,296,550,830,911,1265,1357,1359,1371,1374 '0n':183 '1':68,198,199,208,209,314,346,360,374,386,546,558,571,774,971,976,981,1012,1027,1039,1095,1107,1112,1130,1149,1172,1178,1227,1235,1243,1250,1267 '1.1':70 '1.2':134 '1.3':187 '10':804,1271 '1000':599,651 '11':1036 '12':1025 '123':1216 '2':151,242,316,318,349,363,376,388,549,561,576,775,782,783,801,972,977,982,1017,1028,1038,1097,1108,1114,1132,1151,1173,1180,1228,1236,1248,1252,1268 '2.1':245 '2.2':279 '2.3':331 '25':863,1195,1199 '3':145,150,391,393,554,560,581,776,973,978,983,1154,1174,1182,1229,1237,1269 '3.1':396 '3.14':92 '3.14159':1280 '3.2':437 '3.3':478 '30':867,894,920 '33':4,14,23,33,1423 '35':871 '4':537,556,559,784,1175,1183,1233,1238,1270 '4.1':541 '4.2':586 '4.3':631 '4.4':695 '42':89 '5':144,149,168,169,172,173,450,457,754,803,1024,1026,1035,1037,1176,1184,1234,1239 '5.1':757 '5.2':805 '5.3':853 '5.4':927 '53':146 '6':785,974,979,984,1040 '6.1':1043 '6.2':1088 '7':75,1159 '7.1':1163 '7.2':1218 '7.3':1272 '7.4':1313 '8':178 '90':912 '9007199254740991n':99 'acc':993,996,1003,1006 'accumul':900 'add':818,962,970,975,980 'add/delete':1142 'addon':1009,1022,1033 'address':1212,1214,1323,1329,1335 'addthendoubl':1019,1023 'addtotot':832 'adult':890 'age':862,866,870,1189,1194,1198 'alic':496,500,861,881,1193,1197 'alsoblock':271 'alway':232,1384 'anim':1050,1058,1076,1084 'applic':329 'arg':948,955,959 'args.length':950 'arr1':1226,1232 'arr2':1231 'array':1166 'arrow':501 'ask':1480 'async':540,698,739 'async/await':696 'avoid':616 'await':705,719,745,1310 'b':452,456,794,797,820,823,935,940,965,968,1096,1104,1113,1247,1251,1262,1264 'bark':1085 'base':428 'behavior':55 'best':63 'big':98 'bigint':93 'bind':517 'block':263,269,272,278,352 'blockvar':268 'bob':508,865,882,896,925,1207,1209 'bool':102 'boolean':100,154,156,158,161,164 'bound':531,535 'boundari':1488 'browser':487 'bug':133 'bye':477 'c':936,941,966,969 'calcul':1293,1296 'call':397,433,574,1402 'callback':579,587,589,593,595,614 'caller':734 'card':1379 'case':214,321,429 'catch':659,723 'chain':913,1048,1315,1320,1417 'charli':524,525,869,883,898,926 'check':1420 'citi':1190,1200,1324,1327,1330 'clarif':1482 'class':1072,1075,1081,1292 'clear':1455 'close':297 'closur':244,280,282,1392 'coalesc':1317,1349 'code':60,573 'coerc':171,193 'coercion':136,143,155,167,204 'collect':1254 'combin':667,986 'common':319 'compar':1367 'compos':989,1020 'composit':929,985 'concept':7,17,26,36,51,1380,1425 'condit':888 'console.error':609,661,725 'console.log':402,406,411,442,451,464,476,484,498,510,520,545,548,553,555,612,657,664,1052,1061,1078,1086 'const':80,87,90,97,101,109,115,270,310,336,365,372,379,383,493,505,530,637,703,717,742,772,777,798,858,876,889,904,914,942,961,988,998,1008,1013,1018,1029,1049,1055,1092,1117,1120,1126,1145,1168,1187,1203,1211,1225,1230,1240,1244,1278,1308,1321,1326,1332,1340,1350,1355,1362,1369,1391 'consum':652 'context':483 'convent':603 'convert':139 'copi':1116,1118 'copy2':1121 'count':295,303,306,309 'counter':311 'counter.getcount':317 'counter.increment':313,315 'creat':634 'createcount':293,312 'criteria':1491 'curri':928,931,943,947,958,963 'data':322,597,619,621 'debug':52 'decrement':304 'default':1288,1291,1353,1354,1358,1364,1372,1373 'delet':1156 'depend':841,852,1397 'describ':1459 'descript':118 'destructur':1164,1167,1186 'develop':9,28 'developer.mozilla.org':1437 'developer.mozilla.org/en-us/docs/web/javascript/guide)':1436 'diana':528,529 'dog':1056,1082 'dog.bark':1059,1067 'dog.speak':1063 'done':665 'doom':630 'doubl':778,799,802,1014,1021,1032 'doublethenadd':1030,1034 'dynam':1306 'edg':213 'effect':816,837 'element':875,886 'empti':110,1363 'end':408,419 'entri':1100 'environ':1471 'environment-specif':1470 'equal':166,188,192,202 'error':364,377,601,605,608,610,649,660,662,713,724,726,727,729,1339 'error-first':600 'es6':1071,1162 'essenti':5,24 'eve':534,536 'event':538,542,1403 'everi':8,27 'exampl':422 'exceed':436 'execut':395,569,738 'expand':1223 'expert':1476 'explain':49 'explicit':516 'export':1276,1277,1281,1289,1290 'express':467 'extend':1083 'extern':826,843,851 'f':933,938 'factori':327 'fail':650,714,1134,1155,1158 'fals':157,163,174,180,207,210,222,226 'falsi':176,1376 'fetch':706,716,747,749 'fetchal':741 'fetchdata':592,604 'fetchuserdata':700 'filter':855,884,917 'final':663 'first':401,403,407,413,415,418,602,686,692,1169,1177 'float':86,91 'fn':944,994,995,1004,1005,1341 'fn.apply':953 'fn.length':951 'fns':990,1000 'fns.reduce':1002 'fns.reduceright':992 'freez':1124 'frozen':1127 'frozen.x':1131 'function':254,256,260,275,285,292,326,339,394,400,409,424,458,462,466,475,502,518,591,699,740,755,761,762,767,771,788,789,793,807,817,831,845,946,987,1060,1256,1282,1393,1400,1409 'functionvar':259 'fundament':58,69 'get':681 'getcount':307 'getdata':618 'getdiscount':846 'getnam':1343 'github.com':19,38,1427,1445 'github.com/getify/you-dont-know-js)':1444 'github.com/leonardomso/33-js-concepts)':1426 'github.com/leonardomso/33-js-concepts).':18,37 'global':249,253,482,489 'globaldiscountr':850 'globalvar':252 'greet':497,509,519 'greet.apply':526 'greet.bind':532 'greet.call':522 'guid':1435 'handl':212,736 'hell':615 'hello':82,159 'hi':465 'higher':759 'higher-ord':758 'histor':132 'hoist':341,354,438,441,445,459,470 'i/o':585 'identifi':114 'ignor':277 'immut':123,1125 'implicit':138 'import':1294,1295,1301,1307,1311 'impur':824,840 'increment':301 'infinit':425,426,430 'inherit':513,1045,1066 'initi':447 'input':811,1411,1485 'inspir':12,31 'integ':84,96 'iter':1224 'javascript':2,6,21,25,50,57,73,78,137,141,190,248,291,337,399,423,439,481,544,588,633,697,768,808,857,930,1046,1091,1161,1165,1221,1274,1318,1434 'javascript-masteri':1 'javascript.info':1429,1431 'javascript.info/)':1430 'join':924 'js':16,35,54,62,1424,1443 'js-concept':15,34 'keep':885 'key':119,1098,1381 'keyword':480 'know':11,30,1442 'languag':66 'larg':95 'let':105,267,294,334,351,358,361,367,455,828,1388,1390 'let/const':265 'lexic':289,503,1394 'like':366 'limit':1447 'loop':539,543,1404 'loos':191 'macrotask':567,582,1407 'main':1217 'map':854,872,921 'masteri':3,22 'match':887,1456 'math':1303 'maximum':432 'mdn':1433 'memoiz':330 'method':492,1070,1090,1347 'microtask':563,577,1405 'miss':1493 'mode':1139 'modern':1160 'modifi':825,1144 'modul':324,1273,1309 'morearg':957,960 'multipli':790,800 'must':673 'mutabl':382 'n':780,781 'name':495,507,523,527,533,860,864,868,877,895,897,1188,1192,1196,1204,1206,1275 'nan':186,216,217,219,220 'nest':1210 'new':639,648,712 'node':490 'notblock':274 'notifi':626 'null':108,111,128,184,195,205,596,1352 'null/undefined':1421 'nullish':1316,1348,1361,1366 'num':88 'number':83,147,153,773,1258 'numbers.map':779 'numbers.reduce':1260 'nyc':1325,1331 'obj':384,494,1093,1102,1106,1110,1119,1123 'obj.a':387 'obj.b':390 'obj1':1241,1246 'obj2':506,1245 'object':129,380,491,1041,1089,1185 'object.assign':1122 'object.create':1057 'object.entries':1109 'object.freeze':1128 'object.is':211,215,223 'object.keys':1101 'object.seal':1147 'object.values':1105 'ok':350,389,392,1152 'oper':189 'option':1314,1319 'order':570,760 'outer':255,514 'output':414,557,813,1413,1465 'overflow':421 'p1':669,676,684,690 'p2':670,677,685,691 'p3':671 'parallel':737 'partial':328 'pass':124 'pattern':325,590 'permiss':1486 'pi':1279,1297 'pipe':999,1031 'point':120,1382 'post':744,753 'practic':64 'prefer':1389 'price':847,849 'primit':71,76,121 'privaci':323 'process':622,624 'processdata':620 'program':756 'promis':564,578,632,636,638,640,653,654,666 'promise.all':668,746 'promise.allsettled':675 'promise.any':689 'promise.race':683 'promise.resolve':551 'proto':1415 'prototyp':1042,1044,1047,1414,1416 'pure':806,809,1408 'pyramid':628 'queuemicrotask':580 'quick':1377 'quirk':67 'rangeerror':431 're':731 're-throw':730 'reason':239 'reassign':371 'redeclar':343,357 'reduc':856,899 'refer':1378 'referenceerror':453 'reject':642,647 'remain':1255 'rememb':287 'renam':1202 'requir':1484 'resolv':641,644 'resourc':1422 'respons':704 'response.json':720 'response.ok':710 'rest':1171,1181,1220,1253 'result':598,606,613,656,658,915 'return':300,302,305,308,611,721,751,766,786,792,795,821,838,848,945,952,956,1259,1285 'review':59,1477 'rule':231 'run':565 'safeti':1487 'save':625,627 'savedata':623 'sayby':471,474 'sayhi':460,463 'scope':243,246,250,257,264,290,340,353,1395,1458 'seal':1140,1146 'sealed.x':1150,1157 'sealed.y':1153 'second':405,410,412,417,1170,1179 'setinterv':584 'settimeout':547,568,583,594,643 'settl':688 'shallow':1115 'side':815,836 'silent':1133 'singl':902 'size':435 'skill':44,47,1450 'skill-javascript-mastery' 'sound':1054,1065,1080 'source-sickn33' 'speak':1051,1077 'specif':238,1472 'spread':1219,1222 'squar':1283,1298 'stack':398,420,434,575 'start':404,416 'state':827,844 'status':682 'stop':1478 'str':81 'street':1213,1215 'strict':175,201,1138 'string':79,142,148,152 'substitut':1468 'succeed':674,694 'success':645,1490 'sugar':1074 'sum':907,909,1257,1266 'sym':116 'symbol':112,117 'synchron':572 'syntact':1073 'take':764,769 'task':1454 'tdz':355,454 'teach':56 'test':1474 'this.name':499,511,521 'throw':711,728,732,1136 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':179,829,834,839 'totalag':905 'transform':873,932 'treat':1463 'tri':702 'tricki':53 'true':103,160,165,170,197,200,218,230,262 'type':72,77,135,140,194,247 'typeerror':472 'typeof':127 'u':879,892,908,918,922 'u.age':893,910,919 'u.name':880,923 'undef':106 'undefin':104,107,185,196,206,444,512,1337,1344 'understand':65 'uniqu':113 'unknown':1191,1201 'unless':234 'use':42,45,233,320,1385,1448 'user':718,722,743,752,859,916,1322,1328,1334,1342 'userid':701,708 'usernam':1205,1208 'users.filter':891 'users.map':878 'users.reduce':906 'valid':1473 'valu':126,177,833,835,903,1099,1351 'value2':1370 'var':251,258,273,276,332,338,344,347,448,473,1386 'variabl':299,440 'vs':333,335,1383,1387,1418 'wait':678 'window':486 'woof':1062,1068,1087 'work':461 'x':345,348,991,997,1001,1007,1010,1011,1015,1016,1129,1148,1284,1286,1287 'y':359,362 'z':373,375 'zero':1356 'zip':1333,1336","prices":[{"id":"7e2b8c36-3db9-4d58-8938-5d7e43efafd2","listingId":"0cbdaff8-29c8-43e4-968e-b3b2b63f5845","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:38:46.648Z"}],"sources":[{"listingId":"0cbdaff8-29c8-43e4-968e-b3b2b63f5845","source":"github","sourceId":"sickn33/antigravity-awesome-skills/javascript-mastery","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/javascript-mastery","isPrimary":false,"firstSeenAt":"2026-04-18T21:39:22.081Z","lastSeenAt":"2026-04-25T06:51:22.642Z"},{"listingId":"0cbdaff8-29c8-43e4-968e-b3b2b63f5845","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/javascript-mastery","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/javascript-mastery","isPrimary":true,"firstSeenAt":"2026-04-18T20:38:46.648Z","lastSeenAt":"2026-04-23T23:40:45.504Z"}],"details":{"listingId":"0cbdaff8-29c8-43e4-968e-b3b2b63f5845","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"javascript-mastery","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34997,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-25T06:33:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"470281241dd6990979ecca882a0bfd57a915214c","skill_md_path":"skills/javascript-mastery/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/javascript-mastery"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"javascript-mastery","description":"33+ essential JavaScript concepts every developer should know, inspired by [33-js-concepts](https://github.com/leonardomso/33-js-concepts)."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/javascript-mastery"},"updatedAt":"2026-04-25T06:51:22.642Z"}}