JavaScript
JS μ μ¬λ°°μ΄κ³Ό λ°°μ΄μ μ°¨μ΄μ
μ μ¬ λ°°μ΄κ³Ό λ°°μ΄μ μ΄λ»κ² λ€λ₯ΌκΉ? μ μ¬ λ°°μ΄ νν μλ λ³μλ€μ μΆλ ₯ν΄λ³΄λ©΄ λͺ¨λ λ°°μ΄κ³Ό ννκ° κ°μ΅λλ€. νμ§λ§ μ§μ§ λ°°μ΄μ array λΏμ λλ€. λΈλΌμ°μ μμ λ°μ΄ν°λ₯Ό λκ²¨μ€ λ λ°°μ΄μ²λΌ 보μ΄λ κ°μ²΄λ₯Ό λ겨μ€λλ€. μ΄κ²μ μ μ¬ λ°°μ΄μ΄λΌκ³ ν©λλ€. let array = [1, 2, 3]; // [1, 2, 3] let nodes = document.querySelectorAll('div'); // NodeList [div, div, div, div, div, ...] let els = document.body.children; // HTMLCollection [noscript, link, div, script, ...] Array.isArray() λ©μλλ‘ array μΈμ§ νμΈν μ μμ΅λλ€. Array..
JS ꡬ쑰λΆν΄ ν λΉ
ꡬ쑰 λΆν΄ ν λΉ Destructuring Assignment κ°μ²΄λ λ°°μ΄μ μ μ₯λ λ°μ΄ν° μ μ²΄κ° μλ μΌλΆλ§ νμν κ²½μ°μ κ°μ²΄λ λ°°μ΄μ λ³μλ‘ 'λΆν΄’ν μ μκ² ν΄μ£Όλ νΉλ³ν λ¬Έλ²μΈ ꡬ쑰 λΆν΄ ν λΉμ μ¬μ©ν μ μμ΅λλ€. κ°μ²΄ ꡬ쑰λΆν΄ ν λΉ // μΌλ°μ μΈ κ°μ²΄ μμ± μ κ·Ό const user = {name: "μ§μ§", age: 10}; console.log(user.name); // μ§μ§ console.log(user.age); // 10 // ꡬ쑰λΆν΄ ν λΉ μ¬μ© β const { name, age } = user; console.log(name); // μ§μ§ console.log(age); // 10 ꡬ쑰 λΆν΄λ₯Ό μ¬μ©νλ©΄ λ°μ΄ν°μ μ κ·ΌνκΈ° νΈν©λλ€. κ·Έλ¬λ ν€ κ°μΌλ‘ λΆλ¬μ¨ κ²μ΄κΈ°μ name μ΄ μ..
JS μ€ν 컨ν μ€νΈμ μ½ μ€ν
https://medium.com/sjk5766/call-stack%EA%B3%BC-execution-context-%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-3c877072db79 Call Stackκ³Ό Execution Context λ₯Ό μμ보μ μ΄ κΈμμ Call Stackκ³Ό Execution Contextμ λν΄ λ€λ£Ήλλ€. κ° μ©μ΄λ νκ΅μ΄λ‘ ν΄μνμ§ μκ³ μμ΄ κ·Έλλ‘ νκΈ°ν©λλ€. medium.com μ λ§ν¬λ₯Ό μ°Έκ³ νμ¬ μ κ° μ΄ν΄ν λΆλΆλ§ μ μλλ‘ μ 리νμ΅λλ€. μ λ§ν¬λ₯Ό 보μλ©΄ λ μμΈνκ² κ·Έλ¦Όκ³Ό ν¨κ» μ 보λ₯Ό μ»μ μ μμ΅λλ€. μ€ν 컨ν μ€νΈ Execution context μ€ν 컨ν μ€νΈλ μλ°μ€ν¬λ¦½νΈ μ½λκ° μ€νλλ νκ²½μ λ§ν©λλ€. ν¬κ² 2κ°μ§λ‘ λλ©..
JS νΈμ΄μ€ν κ³Ό TDZ
νΈμ΄μ€ν hoisting μλ°μ€ν¬λ¦½νΈ μμ§μ μ½λλ₯Ό μ€ννκΈ° μ μ½λ μ 체λ₯Ό μ€μΊνλ©΄μ νμν λ° κ΅¬λΆνλ κ³Όμ μ κ±°μΉλλ° μ΄ κ³Όμ μμ λ³μ, ν¨μ, ν΄λμ€ λ± λͺ¨λ μ μΈμ μλ‘ λμ΄ μ¬λ¦½λλ€. μΈν°ν리ν°κ° λ³μμ ν¨μμ λ©λͺ¨λ¦¬ 곡κ°μ μ μΈ μ μ 미리 ν λΉνλ κ²μ μλ―Έν©λλ€. var μ κ²½μ° νΈμ΄μ€ν μ undefined λ‘ λ³μλ₯Ό μ΄κΈ°ν νμ§λ§, let κ³Ό const λ³μλ μ΄κΈ°ν λμ§ μμ΅λλ€. λλ¬Έμ μλμ κ°μ μ½λ(1) κ° κ°λ₯ν©λλ€. κ·Έλ¬λ μ μΈλΆλ§ λμ΄μ¬λ € λμ κ²μ΄κΈ°μ, (2) μ½λμ²λΌ ν λΉλ κ°μ κ°μ Έ μ€λ κ²μ λΆκ°λ₯ ν©λλ€. add(1, 3); // (1) ν¨μ μ μΈλ³΄λ€ μμ μμ§λ§ μ€λ₯ λμ§ μκ³ μ€νλ©λλ€. console.log(a); // (2) μλ¬. ν λΉλμ§ μμ κ²μ μΆλ ₯..
JS μ€μ½νμ μ€μ½ν 체μΈ
μ€μ½ν Scope μ€μ½νλ μλ³μ(λ³μ, ν¨μ, ν΄λμ€ μ΄λ¦) μ κ·Ό κ·μΉμ λ°λ₯Έ μ ν¨ λ²μμ λλ€. μ¦, κ°λ¨νκ² λ³μλ₯Ό μ°Έμ‘°ν μ μλ μ ν¨ν λ²μλΌκ³ μκ°νλ©΄ λ©λλ€. μ€μ½νλ λΈλ { } νΉμ ν¨μμ μν΄ λλ μ§λλ€. (λΈλμ΄λΌ νλ©΄, if(){}, for(){} ... λ±λ ν¬ν¨ν©λλ€.) μλ μμλ₯Ό 보면, λΈλ μμμλ λΈλ λ°μ μλ k λ λΈλ μμ μλ x λ μ μΆλ ₯λ©λλ€. κ·Έλ¬λ λΈλ λ°μμ λΈλ μμ μλ x λ₯Ό μΆλ ₯νλ €κ³ νλ©΄ μλ¬κ° λ°μν©λλ€. ν¨μ λ°μμ μ μλ k λ₯Ό μ μ λ³μ, μ μ μ€μ½ν ( μ 체μμ μ κ·Ό μ ν¨) ν¨μ λ΄μμ μ μλ x λ₯Ό μ§μ λ³μ, μ§μ μ€μ½ν λΌκ³ ν©λλ€. (μ§μ λ΄μμλ§ μ κ·Ό μ ν¨) λ°(μ μ) μμλ μ(μ§μ)μ λ³μλ₯Ό μ°Έμ‘°ν μ μμ§λ§, μ(μ§μ)μμ..
JS Equality operators == === != !==
μλ°μ€ν¬λ¦½νΈμμ κ°μ΄ κ°μμ§ μλμ§λ₯Ό λΉκ΅ν λ μ¬μ©νλ λμΌ μ°μ°μλ₯Ό μμλ³΄κ² μ΅λλ€. == : κ°μ΄ κ°μ === : κ°κ³Ό νμ λ λ€ κ°μ != : κ°μ΄ λ€λ¦ !== : κ°κ³Ό νμ λ μ€μ νλλ§ λ¬λΌλ λ€λ¦ κΈ°λ³Έ μλ£ν μμμ λλ€. console.log(1 == '1'); // true console.log(1 === '1'); // false console.log(1 != '1'); // π false console.log(1 != 1); // ππ false console.log(1 !== '1'); // true κ°μ κ°μ§λ§ νμ μ΄ λ€λ¦ console.log(1 !== 2); // true κ°μ λ€λ₯΄μ§λ§ νμ μ΄ κ°μ console.log(1 !== 1); // πππ false μ²μμλ != ..
JS undefined κ³Ό null λΉκ΅
undefined κ³Ό null μ λ λ€ ν ν λΉ μνλ₯Ό λ§νλλ°, λ―Έλ¬ν μ°¨μ΄κ° μμ΅λλ€. let item; // κ°μ΄ μμ§ ν λΉ λμ§ μμ μν console.log(item); // κ²°κ³Ό : undegined item = null; // λΉ κ°μ΄ λΌλ κ²μ ν λΉ ν΄μ€ μν console.log(item); // κ²°κ³Ό : null λν νμ μμλ μ°¨μ΄κ° λ©λλ€. console.log(typeof null); // object console.log(typeof nudefined); // undefined null μ μλ°ν λ§νμλ©΄, λΉμ΄μλ κ°μ²΄μ λλ€. κ·Έλ¬λ undefined λ λΉμ΄μλμ§ μλμ§ λͺ¨λ₯΄λ μνλ₯Ό λν λ λλ€. 곡λΆλ₯Ό νλ€ λ³΄λ©΄ μΆλ ₯ κ°μμ null νΉμ undefined λ₯Ό λ§μ£ΌμΉλ..
JS λμ¨ν νμ μ λμ μΈμ΄
μλ°μ€ν¬λ¦½νΈλ λμ¨ν νμ μ λμ μΈμ΄μ λλ€. νλμ© νμ΄μ λ΄ μλ€. μλ°μ€ν¬λ¦½νΈμλ νμ μ΄ μμ§λ§, λ³μμ νμ μ νμμ μΌλ‘ μ§μ νμ§ μμλ λ©λλ€. λλ¬Έμ ‘λμ¨ν νμ (loosely typed) μΈμ΄’ λΌκ³ ν μ μμ΅λλ€. λν, λ³μμ μ μ₯λλ κ°μ νμ μ μΈμ λ μ§ λ°κΏ μ μκΈ° λλ¬Έμ ‘λμ νμ (dynamically typed) μΈμ΄' λΌκ³ λ λΆλ₯Ό μ μμ΅λλ€. λ°λ‘ μ΄ νΉμ§μ΄ μλ°μ€ν¬λ¦½νΈμ μ½μ μ΄ λ©λλ€. μλ°μ€ν¬λ¦½νΈλ μ»΄νμΌ λ ν μ€νλλ κ²μ΄ μλλΌ μ€νλλ μκ° ν μ€μ© μ½μΌλ©° (μΈν°ν리ν°) μ€νμ΄ λ©λλ€. μ¦, μ»΄νμΌλλ κ³Όμ μ΄ λ°λ‘ μκΈ° λλ¬Έμ νμ μ€λ₯λ₯Ό μ€ν μ μ 체ν¬ν μκ° μμ΅λλ€. μ΄λ° μ½μ μ 보μνκΈ° μν΄μ κ°λ°μλ μ΄λ»κ² ν΄μΌ ν κΉμ? 1. μμλλ νμ μλ¬λ₯Ό μ..
JS ν¨μ μ μΈλ¬Έκ³Ό ν¨μ ννμ μ°¨μ΄
ν¨μ μ μΈλ¬Έκ³Ό ν¨μ ννμμ΄ λ¬΄μμΈμ§ μμλ΄ μλ€. ν¨μλ₯Ό λ§λ λ€λ λͺ©μ μ λμΌ νλ λ§λλ λ°©λ²μ΄ λ€λ¦ λλ€. // ν¨μ μ μΈλ¬Έ function add(a, b) { return a+b; } // ν¨μ ννμ const sum = function(a,b) { return a+b; } ν¨μ μ체λ₯Ό μ μΈνλ©΄ ν¨μ μ μΈλ¬Έ, μ μΈν ν¨μλ₯Ό λ³μμ λ΄μμ μ¬μ©νλ©΄ ν¨μ ννμμ΄λΌ ν©λλ€. μ΄ λμ νΈμ΄μ€ν λ°©μμμ μ°¨μ΄κ° λ©λλ€. add(1, 3); // ν¨μ μ μΈλ³΄λ€ μμ μμ§λ§ μ€λ₯κ° λμ§ μμ΅λλ€. function add(a, b) { // ν¨μ μ μΈλ¬Έ return a+b; } console.log(sum(1,2)); // μλ¬. // ReferenceError Cannot access 'sum' before..
JS μμ 볡μ¬μ κΉμ 볡μ¬
κ°μ²΄(Object)λ₯Ό 볡μ¬νλ λ°©λ²μ μμ 볡μ¬(Shallow Copy) μ κΉμ 볡μ¬(Deep Copy) λ‘ λλ©λλ€. μ¬μ©νλ λ©μλλ μ¬λΏ μμ§λ§, 컨μ μ 2κ°μ§ μ λλ€. κ°μ μ£Όμ κ°μ 볡μ¬ν΄ μ€ κ²μΈμ§, κ° μ체λ₯Ό 볡μ¬ν΄ μ€ κ²μΈμ§μ. κ°μ²΄κ°μ μ°Έμ‘°ν λ°μ΄ν°λ₯Ό 볡μ¬νκ² λλ©΄, κ°μ΄ λ©λͺ¨λ¦¬ μ μ ν λΉλλ κ²μ΄ μλλΌ κ°μ΄ λ€μ΄ μλ μ£Όμκ°(μ°Έμ‘°κ°) μ΄ λ©λͺ¨λ¦¬ μ μ λ€μ΄ κ°λλ€. λλ¬Έμ 볡μ¬λ₯Ό νκ² λλ©΄, κ° μμ²΄κ° μλλΌ κ°μ΄ λ€μ΄κ° μλ μ£Όμκ° μ λ¬ λ©λλ€. μ΄λ κ² λ³΅μ¬λλ κ²μ Shallow Copy λΌκ³ ν©λλ€. Shallow Copy spread syntax, Array.prototype.concat(), Array.prototype.slice(),Array.from(), Object.as..
JS λΆλ³ κ°μ²΄ λ§λ€κΈ°
νΉμ κ°μ²΄λ₯Ό μμ μ΄ λΆκ°λ₯νκ² λ§λ€ λ, λΆλ³ κ°μ²΄λ₯Ό λ§λ€μ΄ μ¬μ©ν©λλ€. λΆλ³ κ°μ²΄λ₯Ό λ§λλ λ°©λ²μ 3κ°μ§ μ λλ€. κ° λ°©λ²λ§λ€ μμ κ°λ₯ λ²μκ° λ€λ₯΄κ² μ νλκΈ° λλ¬Έμ νμμ λ°λΌ μ ννλ©΄ λ©λλ€. 1. Object.freeze() μμ± μ¬μ μ X, μΆκ° X, μμ X, μμ X κ·Έλ¬λ! μ€μ²©λ company λ freeze λμ§ μμ΅λλ€. λλ¬Έμ company.name μ μμ κ°λ₯ν©λλ€. μμ± μ¬μ μκ° μλλ€λ κ²μ Object.defineProperty() λ‘ μμ±λ€μ μ¬μ μ ν μ μλ€λ λ»μ λλ€. μλ λ§ν¬ μ°Έκ³ . const company = { name: 'SS'}; const people = { name: 'lee', age: 20, work: company } Object.freeze(p..
JS Truthy μ Falsy
μ«μλ λ¬Έμμ΄λ μ΄λ€ κ°μ΄λμ λ°λΌ true, false μ κ°μ κ°μ§λλ€. μ΄κ²μ μ ννκ² μκ³ μμ΄μΌ λμ€μ ν·κ°λ¦¬μ§ μμΌλ μ΄λ² κΈ°νμ μΈμ λ΄ μλ€! Falsy κ±°μ§ 0 -0 '' null undefined NaN Truthy μ°Έ 1 -1 'hello!' {} Infinity μ°Έκ³ μλ£ π https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Boolean Boolean - JavaScript | MDN Boolean κ°μ²΄λ λΆλ¦¬μΈ κ°μ κ°μΈκ³ μλ κ°μ²΄μ λλ€. developer.mozilla.org
JS ν λ³ν (λ¬Έμλ₯Ό μ«μλ‘, μ«μλ₯Ό λ¬Έμλ‘), λ³μμ νμ νμΈ typeof
ν λ³νμ μμ λ³μμ νμ μ μ μ μλ λ°©λ²μ μμ λ³΄κ² μ΅λλ€. κ°λ¨ν©λλ€. μ μ¬μ©νλ©΄ λ³μμ νμ μ μ μ μμ΅λλ€. boolean ν, μ«μνμ λ¬Έμν μΌλ‘ λ°κΏ λ΄ λλ€. let value = true; alert(typeof value); // boolean value = String(value); // string μΌλ‘ ν λ³ν alert(value); // "true" alert(typeof value); // string String() μ μ¬μ©νμ§ μκ³ +"" λ₯Ό μ¬μ©νκΈ°λ ν©λλ€. νΉμ toString() μ μ¬μ©ν©λλ€. let cnt = 1; console.log(typeof cnt); // number console.log(typeof (cnt+"")); // string cons..
JS κΈ°λ³Έν λ°μ΄ν°μ μ°Έμ‘°ν λ°μ΄ν°μ μ°¨μ΄
μλ°μ€ν¬λ¦½νΈμ νμ μ ν¬κ² 2κ°μ§λ‘ λλ©λλ€. κΈ°λ³Έν λ°μ΄ν°(Primitive) μ μ°Έμ‘°ν λ°μ΄ν°(Reference) μ λλ€. κΈ°λ³Έν λ°μ΄ν°μλ string, number, bigint, boolean, undefined, symbol, null μ΄ μμ΅λλ€. μ°Έμ‘°ν λ°μ΄ν°μλ object κ° μκ³ , κ±°κ²μ ν¬ν¨μ΄ λλ array, function, RegExp(μ κ·ννμ), map, set λ±μ΄ μμ΅λλ€. λ νμ μ κ°μ₯ ν° μ°¨μ΄λ κ°μ μ μ₯νλ λ°©μμ λλ€. κΈ°λ³Έν λ°μ΄ν°λ λ°λ‘ κ°μ λ©λͺ¨λ¦¬μ ν λΉνμ§λ§, μ°Έμ‘°ν λ°μ΄ν°λ κ°μ΄ λ€μ΄ μλ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό ν λΉν©λλ€. μλ₯Ό λ€μ΄λ³΄λ©΄, λ¨Όμ a μ 1 μ λ£μ΅λλ€. let a = 1; let b = a; aμ κ°μ λ°μ bλ₯Ό μΆλ ₯νλ©΄ 1μ΄ λμ΅λλ€. μ΄κ²μ..