Variable

๋ณ€์ˆ˜์™€ ๊ฐ์ฒด

[TOC]

๋ณ€์ˆ˜

๋ณ€์ˆ˜ ์„ ์–ธ

  • ๋ณ€์ˆ˜: ๊ฐ’์„ ๋‹ด๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์„ ๋ถ™์ธ ์ƒ์ž

  • var(์„ ์–ธ์ž) number(๋ณ€์ˆ˜ ์ด๋ฆ„);

  • ๋ณ€์ˆ˜๋Š” ์ตœ๋Œ€ํ•œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

var number;
var number_1 = 1,
  number_2 = 2;
  • โ—๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ  ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ž๋™์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธ

x = 2;
console.log(typeof x); // number

์ „์—ญ๋ณ€์ˆ˜(global variable)์™€ ์ง€์—ญ๋ณ€์ˆ˜(local variable)

  • ์ „์—ญ๋ณ€์ˆ˜: ์ „์—ญ ๊ฐ์ฒด(window)์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜

    โ—์ „์—ญ ๋ณ€์ˆ˜๋Š” ๋†’์€ ์ ‘๊ทผ์„ฑ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

  • ์ง€์—ญ๋ณ€์ˆ˜: ํ•จ์ˆ˜ ๋˜๋Š” ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜

varletconst

ํ˜ธ์ด์ŠคํŒ…

O

X

X

์žฌ์„ ์–ธ

O

X

X

์žฌํ• ๋‹น

O

O

X

var ๋ณ€์ˆ˜

ํ˜„์žฌ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ํด๋กœ์ € ๋ฒ”์œ„์˜ ์„ ํƒ์ ์ธ ๊ฐ’ ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋Š” ๋ณ€์ˆ˜

  • โ—var์€ ์–ด๋Š ์œ„์น˜์—์„œ ์„ ์–ธ๋˜๋“  ์ฝ”๋“œ์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด ์˜ฌ๋ ค์ ธ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.(ํ˜ธ์ด์ŠคํŒ…)

  • ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„์˜ ์ตœ์ƒ๋‹จ์—์„œ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์ฝ๊ธฐ ์‰ฝ๋‹ค.

  • ๋ณ€์ˆ˜์˜ ์„ ์–ธ๋งŒ ํ˜ธ์ด์ŠคํŒ… ๋  ๋ฟ, ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”๋Š” ํ˜ธ์ด์ŠคํŒ… ๋˜์ง€ ์•Š๋Š”๋‹ค. (์ดˆ๊ธฐํ™” ์ „๊นŒ์ง€ undefined๋ฅผ ๋ฐ˜ํ™˜)

  • NodeJS, CommonJS ๋ชจ๋“ˆ์—์„œ ์ตœ์ƒ์œ„ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด๋„ ๋ฒ”์œ„๋Š” ๋ชจ๋“ˆ๋กœ ํ•œ์ •๋˜์–ด ์ „์—ญ ๊ฐ์ฒด์— ์†์„ฑ์œผ๋กœ ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค.

โ—์žฌ์„ ์–ธ์„ ํ•˜๋”๋ผ๋„ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

var a = 1;
var a = 2; // ์žฌ์„ ์–ธ ๊ฐ€๋Šฅ
let b = 1;
let b = 2; // Uncaught SyntaxError: Identifier 'b' has already been declared 

์ „์—ญ ์ปจํ…์ŠคํŠธ์—์„œ ์„ ์–ธ๋˜๋ฉด ์ „์—ญ ๊ฐ์ฒด(window)์˜ ์†์„ฑ์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

var x = "var type";
let y = "let type";
console.log(this.x); // var type
console.log(this.y); // undefined
console.log(this); // Window(์ „์—ญ๊ฐ์ฒด)

let ๋ณ€์ˆ˜

ES2015๋ถ€ํ„ฐ ๋„์ž…๋œ ์žฌ์„ ์–ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ–๋Š” ์„ ํƒ์ ์ธ ๊ฐ’ ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋Š” ๋ณ€์ˆ˜

  • ์„ ์–ธ๋ถ€์— ๋„๋‹ฌํ•˜๊ธฐ ์ „๊นŒ์ง€ ์•ก์„ธ์Šค ๋ถˆ๊ฐ€ -> TDZ

  • โ—let๊ณผ const๋Š” var์™€ ๋‹ฌ๋ฆฌ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋˜๋”๋ผ๋„ ์ „์—ญ ๊ฐ์ฒด(window)์˜ ์†์„ฑ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

let foo = 1;

const ๋ณ€์ˆ˜

์žฌํ• ๋‹น, ์žฌ์„ ์–ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒ์ˆ˜(constant) ๊ฐ’์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜

  • ๋ฐฐ์—ด์ผ ๋•Œ๋Š” ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ๋ฐ ์ œ๊ฑฐ ๊ฐ€๋Šฅ

  • ์žฌํ• ๋‹น ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ์•Œ๋ ค์คŒ์œผ๋กœ์จ ์ฝ”๋“œ ์ฝ๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.

  • ์„ ์–ธํ•  ๋•Œ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

const๋ฅผ let๋ณด๋‹ค ์œ„์—์„œ ์„ ์–ธํ•˜์ž.

const PI = 3.14;

๋ณ€์ˆ˜ ๋Œ์–ด์˜ฌ๋ฆผ(hoisting)

  • ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€๋ฅผ ํ”„๋กœ๊ทธ๋žจ ์ฒซ ๋จธ๋ฆฌ๋กœ ๋Œ์–ด์˜ฌ๋ฆผ

  • ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋Œ์–ด ์˜ฌ๋ ค์ง€๋Š” ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ๋Œ์–ด์˜ฌ๋ฆฐ ํ›„ ํ•˜๋‚˜์˜ ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.

  • โ—var ๋ณ€์ˆ˜๋Š” ํ˜ธ์ด์ŠคํŒ… ์‹œ underfined๋กœ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”

  • โ—let๊ณผ const๋„ ํ˜ธ์ด์ŠคํŒ… ๋˜๋‚˜ ์„ ์–ธ๋ถ€ ์ „์— ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ

  • ์„ ์–ธ์„ ํ•ด์•ผ๋งŒ ํ˜ธ์ด์ŠคํŒ…์ด ์ž‘๋™

    • //์„ ์–ธ์„ ํ†ตํ•œ ํ˜ธ์ด์ŠคํŒ…
      console.log(x); // undefined
      var x;
    • //์„ ์–ธ์„ ํ†ตํ•œ ํ˜ธ์ด์ŠคํŒ…
      console.log(x); // undefined
      var x = 2;
      console.log(x); // 2
  • โ—์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜ธ์ด์ŠคํŒ…์ด ๋˜์ง€ ์•Š์Œ

    • console.log(x); // Uncaught ReferenceError: x is not defined
      x;
    • console.log(x); // Uncaught ReferenceError: x is not defined
      x = 2;

let ๊ณผ const ํ˜ธ์ด์ŠคํŒ… (Temporal dead zone;TDZ)

  • ์ผ๋ฐ˜์ ์œผ๋กœ let๊ณผ const๋Š” ํ˜ธ์ด์ŠคํŒ…๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.

  • let๊ณผ const๋„ ์„ ์–ธ ์‹œ ๋ธ”๋ก์˜ ์‹œ์ž‘๋ถ€๋กœ ํ˜ธ์ด์ŠคํŒ…๋˜์ง€๋งŒ

    ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „๊นŒ์ง€ TDZ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

TDZ์— ์žˆ๋Š” ๋™์•ˆ์€ ๋ณ€์ˆ˜์— **์•ก์„ธ์Šค๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ(ReferenceError)**ํ•˜๊ณ  ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.

Temporal ์€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ๊ฐ„์  ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • TDZ์— ๋Œ€ํ•œ ์˜ˆ์ œ

    {
        //TDZ starts
        ...
    console.log(x); // Uncaught ReferenceError: Cannot access 'num' beforeinitialization
        ...
    let x = 2;//TDZ end
    }
    
  • TDZ๋กœ ์ธํ•œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์˜ˆ์ œ

    function test() {
      var foo = 33; // 1. var foo ์„ ์–ธ
      if (foo) { // 2. var foo ์ฐธ์กฐ
        let foo = foo + 55; // 3. let foo๋Š” ํ˜„์žฌ TDZ์— ์žˆ์œผ๋ฏ€๋กœ ReferenceError 
      }
    }
    test();
    function go(n) {
            // n here is defined!
            console.log(n); // { a: [1, 2, 3] }
    
            for (let n of n.a) { 
              //let n์€ ํ˜ธ์ด์ŠคํŒ…๋˜์–ด for๋ฌธ ๋ธ”๋ก์˜ ์ตœ์ƒ์œ„์—์„œ ์„ ์–ธ, TDZ์กด ์‹œ์ž‘
              //n.a๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์„ ์–ธ๋˜์ง€ ์•Š์€ let n์„ ์ฐธ์กฐํ•˜์—ฌ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
              // ReferenceError
              console.log(n);
            }
          }
    
          go({ a: [1, 2, 3] });

๋ณ€์ˆ˜ ๋ช…๋ช… ๊ทœ์น™

  • ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฌธ์ž: ์•ŒํŒŒ๋ฒณ(az, AZ), ์ˆซ์ž(0~9), ๋ฐ‘์ค„(_), ๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ($)

  • โ—์ฒซ ๊ธ€์ž๋กœ ์ˆซ์ž๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€

  • โ—์˜ˆ์•ฝ์–ด๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

  • ์ง€์—ญ ๋ณ€์ˆ˜ ๋ช…์€ '_'๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

  • ์ž์ฃผ ์“ฐ์ด๋Š” ์ƒ์ˆ˜๋Š” ๋Œ€๋ฌธ์ž๋งŒ์œผ๋กœ ์ž‘์„ฑํ•˜์—ฌ ๋ˆˆ์— ๋„๊ธฐ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์บ๋ฉ€ ํ‘œ๊ธฐ๋ฒ•(๋กœ์–ด ์บ๋ฉ€ ํ‘œ๊ธฐ๋ฒ•)

  • ๋‘ ๋ฒˆ์งธ ์ดํ›„ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐ -> ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜ ํ‘œ๊ธฐ

  • ex) newName, createLifeGame

ํŒŒ์Šค์นผ ํ‘œ๊ธฐ๋ฒ•(์–ดํผ ์บ๋ฉ€ ํ‘œ๊ธฐ๋ฒ•)

  • ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐ -> ์ƒ์„ฑ์ž, ํด๋ž˜์Šค ํ‘œ๊ธฐ

  • ex) NewName, CreateLiftGame

๋ฐ‘์ค„ ํ‘œ๊ธฐ๋ฒ•(์Šค๋„ค์ดํฌ ํ‘œ๊ธฐ๋ฒ•)

  • ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ์†Œ๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๊ณ  ๋‹จ์–ด ์‚ฌ์ด๋ฅผ ๋ฐ‘์ค„(_)๋กœ ๊ตฌ๋ถ„ -> ์ƒ์ˆ˜ ํ‘œ๊ธฐ

  • ex) new_name, create_life_game

๋ฐ์ดํ„ฐ ํƒ€์ž…

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™์  ํƒ€์ž… ์–ธ์–ด

๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ถ„๋ฅ˜

  • ์›์‹œ ํƒ€์ž…

    • ์ˆซ์ž(Number)

    • ๋ฌธ์ž์—ด(String)

    • ๋…ผ๋ฆฌ๊ฐ’(Boolean)

    • ํŠน์ˆ˜ํ•œ ๊ฐ’(Undefined, Null)

    • ์‹ฌ๋ฒŒ(Symbol)

    • ์ž„์˜ ์ •๋ฐ€๋„(BigInt)

  • ๊ฐ์ฒด ํƒ€์ž…(Object)

์ˆซ์ž(Number)

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ˆซ์ž๋ฅผ ๋ชจ๋‘ 64๋น„ํŠธ ๋ถ€๋™์†Œ์ˆ˜์ ์œผ๋กœ ํ‘œํ˜„

  • ๋ฐฐ์—ด ์ธ๋ฑ์Šค์™€ ๋น„ํŠธ ์—ฐ์‚ฐ์€ 32๋น„ํŠธ ์ •์ˆ˜ ์ฒ˜๋ฆฌ

  • ๋ฆฌํ„ฐ๋Ÿด(literal): ํ”„๋กœ๊ทธ๋žจ์— ์ง์ ‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์ˆ˜ ๊ฐ’

Number(1234)

์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด

๋ถ„๋ฅ˜ํ‘œ๊ธฐ๋ฒ•์˜ˆ์‹œ์„ค๋ช…๋น„๊ณ 

์ •์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด

10์ง„์ˆ˜

123

์ •์ˆ˜ ๊ทธ๋Œ€๋กœ ํ‘œํ˜„

16์ง„์ˆ˜

0x2a

์ˆซ์ž ์•ž์— 0x

8์ง„์ˆ˜

0o73

์ˆซ์ž ์•ž์— 0o

ES6

2์ง„์ˆ˜

0b101

์ˆซ์ž ์•ž์— 0b

ES6

๋ถ€๋™์†Œ์ˆ˜์  ๋ฆฌํ„ฐ๋Ÿด

์ •์ˆ˜.์†Œ์ˆ˜

3.14

์†Œ์ˆ˜ ๊ทธ๋Œ€๋กœ ํ‘œํ˜„

์†Œ์ˆ˜

0.123

์ •์ˆ˜๋ถ€ 0์ผ๋•Œ 0์€ ์ƒ๋žต๊ฐ€๋Šฅ

๊ฐ€์ˆ˜๋ถ€e์ง€์ˆ˜๋ถ€

6.02e23

6.02*10^23

๊ฐ€์ˆ˜๋ถ€E์ง€์ˆ˜๋ถ€

1.16199E-35

1.1616199*10^-35

ํŠน์ˆ˜ํ•œ ๊ฐ’

๋ถ„๋ฅ˜ํ‘œ๊ธฐ๋ฒ•์„ค๋ช…๋น„๊ณ 

์ „์—ญ ๋ณ€์ˆ˜

Infinity

ํ”Œ๋Ÿฌ์Šค ๋ฌดํ•œ๋Œ€

์ „์—ญ ๋ณ€์ˆ˜

NaN

๋ถ€์ • ๊ฐ’(์ˆ˜์น˜ ๊ณ„์‚ฐ ์˜ค๋ฅ˜)

Number์˜ ํ”„๋กœํผํ‹ฐ

Number.PISITIVE_INFINITY

ํ”Œ๋Ÿฌ์Šค ๋ฌดํ•œ๋Œ€

Number์˜ ํ”„๋กœํผํ‹ฐ

Number.NEGATIVE_INFINITY

๋งˆ์ด๋„ˆ์Šค ๋ฌดํ•œ๋Œ€

Number์˜ ํ”„๋กœํผํ‹ฐ

Number.MAX_VALUE

ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ“๊ฐ’

Number์˜ ํ”„๋กœํผํ‹ฐ

Number.MIN_VALUE

ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ๊ฐ’

Number์˜ ํ”„๋กœํผํ‹ฐ

Number.NaN

๋ถ€์ • ๊ฐ’

Number์˜ ํ”„๋กœํผํ‹ฐ

Number.EPSILON

2.22044604925031e-16

ES6

Number์˜ ํ”„๋กœํผํ‹ฐ

Number.MIN_SAFE_INTEGER

-9007199254740990

ES6

Number์˜ ํ”„๋กœํผํ‹ฐ

Number.MAX_SAFE_INTEGER

9007199254740990

ES6

๋ฌธ์ž์—ด(String)

  • 16๋น„ํŠธ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž(UTF-16)

  • ๋ฌธ์ž์—ด์— '' ๋˜๋Š” ""๋ฅผ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉ.

  • ๋ฌธ์ž์—ด ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋ฐฑํ‹ฑ(`)๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • HTML ์š”์†Œ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„ฃ์„ ๋•Œ๋Š” ๋ฌธ์ž์—ด์ฒ˜๋Ÿผ ๊ฐ์‹ธ์„œ ์ž‘์„ฑ

String('hello')
<input type="button" value="Click" onClick="alert('Thanks!')" />
  • ๋ฌธ์ž์—ด์•ˆ์—์„œ ํŠน์ˆ˜ํ•œ ๋ฌธ์ž๋“ค์€ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

  • ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋Š” ์—ญ์Šฌ๋ž˜์‹œ() ๋’ค์— ํŠน์ • ๋ฌธ์ž๋ฅผ ๋„ฃ์–ด ํ‘œํ˜„

์ด์Šค์ผ€์ดํ”„ ์Šคํ€€์Šค์˜๋ฏธ๋น„๊ณ 

\0

๋„(null)๋ฌธ์ž

\b

๋ฐฑ์ŠคํŽ˜์ด์Šค ๋ฌธ์ž

์ˆ˜ํ‰ ํƒญ ๋ฌธ์ž

๊ฐœํ–‰ ๋ฌธ์ž

\v

์ˆ˜์ง ํƒญ ๋ฌธ์ž

\f

๋‹ค์Œ ํŽ˜์ด์ง€ ๋ฌธ์ž

์บ๋ฆฌ์ง€ ๋ฆฌํ„ด ๋ฌธ์ž(CR)

\'

์ž‘์€๋”ฐ์˜ดํ‘œ ๋ฌธ์ž

\"

ํฐ๋”ฐ์˜ดํ‘œ ๋ฌธ์ž

\

์—ญ์Šฌ๋ž˜์‹œ ๋ฌธ์ž

\xXX

๋‘ ์ž๋ฆฟ์ˆ˜ 16์ง„์ˆ˜ XX๋กœ ์ง€์ •๋œ Latin-1 ๋ฌธ์ž

\uXXXX

๋„ค ์ž๋ฆฟ์ˆ˜ 16์ง„์ˆ˜ XXXX๋กœ ์ง€์ •๋œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž

\u{XXXXX}

16์ง„์ˆ˜ ์ฝ”๋“œ ํฌ์ธํŠธ XXXXXX๋กœ ์ง€์ •๋œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž

ES6

๋…ผ๋ฆฌ๊ฐ’(Boolean)

  • ๋…ผ๋ฆฌ ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ true ๋˜๋Š” false ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๋ฅผ ๊ฐ€์ง

  • false์ธ ๊ฒฝ์šฐ

    • 0 , -0

    • null

    • false

    • NaN

    • undefined

    • ""

ํŠน์ˆ˜ํ•œ ๊ฐ’(Undefined, Null)

  • undefined: ์ •์˜๋˜์ง€ ์•Š์€ ์ƒํƒœ

    • ๊ฐ’์„ ์•„์ง ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ๊ฐ’

    • ์—†๋Š” ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฝ์œผ๋ ค๊ณ  ํ–ˆ์„ ๋•Œ์˜ ๊ฐ’

    • ์—†๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ฝ์œผ๋ ค๊ณ  ํ–ˆ์„ ๋•Œ์˜ ๊ฐ’

    • ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’

    • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์ „๋‹ฌ๋ฐ›์ง€ ๋ชปํ•œ ์ธ์ˆ˜์˜ ๊ฐ’

    • ์ˆซ์ž๋กœ์„œ NaN

  • null: ์•„๋ฌด๊ฒƒ๋„ ์—†์Œ

    • ๋ณดํ†ต ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์ง€๋งŒ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’

    • ์ˆซ์ž๋กœ์„œ 0

    • null ๊ฐ’ ํ™•์ธ: nullVar === null์„ ํ†ตํ•ด ํ™•์ธ (typeof ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ)

undefined === undefined // true
undefined === null // false
null === null // true
Number(undefined) // NaN
Number(null) // 0
String(undefined) // "undefined"
String(null) // null
Boolean(undefined) // false
Boolean(null) // false

ECMAScript 6๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…

1.์‹ฌ๋ฒŒ(symbol)

  • ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ ๊ทธ ์–ด๋–ค ๊ฐ’๊ณผ๋„ ์œ ์ผํžŒ ๊ฐ’

  • ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฐ˜ํ™˜

var sym1 = Symbol();
var sym2 = Symbol();
console.log(sym1 == sym2); // false
var HEART = Symbol("ํ•˜ํŠธ");
console.log(HEART.toString()); // Symbol(ํ•˜ํŠธ)
  • ์‹ฌ๋ฒŒ๊ณผ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ

var sym1 = Symbol.for("club");
var sym2 = Symbol.for("club");
console.log(sym1 == sym2); // true
  • ์‹ฌ๋ฒŒ์— for๋กœ ์—ฐ๊ฒฐ๋œ ๋ฌธ์ž์—ด์€ keyFor์„ ํ†ตํ•ด ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค

var sym1 = Symbol.for("club");
console.log(Symbol.keyFor(sym1)); // club

var sym2 = Symbol("club");
console.log(Symbol.keyFor(sym2)); // undefined

2.ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด(templete literals )

  • ``๋กœ ๋ฌถ์€ ๋ฌธ์ž์—ด

  • \n์ด ์•„๋‹Œ ์ผ๋ฐ˜์ ์ธ ์ค„ ๋ฐ”๊ฟˆ์„ ํ†ตํ•ด ์ค„๋ฐ”๊ฟˆ ๊ฐ€๋Šฅ

`I'm going to learn Javascript`;
  • ๋ณด๊ฐ„ ํ‘œํ˜„์‹: ํ…œํ”„๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ์•ˆ์— ํ”Œ๋ ˆ์ด์Šค ํ™€๋”๋ฅผ ${...}์„ ํ†ตํ•ด ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค

var a = 2,
  b = 3;
console.log(`${a} + ${b} = ${a + b}`); // 2 + 3 = 5

ํ˜• ๋ณ€ํ™˜

์•”์‹œ์  ํ˜• ๋ณ€ํ™˜

์—”์ง„์— ์˜ํ•ด ์•”๋ฌต์ ์œผ๋กœ ํƒ€์ž…์ด ์ž๋™ ๋ณ€ํ™˜

  • ๋‹ค๋ฅธ ํƒ€์ž… (+) '๋ฌธ์ž์—ด' -> ๋ฌธ์ž์—ด ํƒ€์ž…

    • 1+'1' -> '11'

  • ์ˆซ์ž (-,*,/) ๋‹ค๋ฅธ ํƒ€์ž… -> ์ˆซ์ž ํƒ€์ž…

    • 1 - '1' -> 0

  • ์กฐ๊ฑด์‹์—์„œ ํ‘œํ˜„์‹ -> ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…

    • 1 ? 'true' : 'false' -> true

๋ช…์‹œ์  ํ˜• ๋ณ€ํ™˜

๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ํƒ€์ž…์„ ๋ณ€ํ™˜

  • ๋ฌธ์ž์—ด -> String() / '123'.toString()

  • ์ˆซ์ž -> Number() / parseInt('123') / parseFloat('3.14')

  • ๋ถ€์šธ -> Boolean() / !!'false'

๋ฐ์ดํ„ฐ ํƒ€์ž… ํ™•์ธ

typeof <Variable>
TypeResult

"undefined"

"object" (์•„๋ž˜ ์ฐธ๊ณ )

"boolean"

"number"

"bigint"

"string"

Symbol (ECMAScript 2015์—์„œ ์ถ”๊ฐ€)

"symbol"

ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด (JS ํ™˜๊ฒฝ์—์„œ ์ œ๊ณต)

๊ตฌํ˜„์ฒด๋งˆ๋‹ค ๋‹ค๋ฆ„

Function ๊ฐ์ฒด (ECMA-262 ํ‘œํ˜„์œผ๋กœ๋Š” [[Call]]์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ์ฒด)

"function"

๋‹ค๋ฅธ ๋ชจ๋“  ๊ฐ์ฒด

"object"

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Operator_precedence

์‚ฌ์น™์—ฐ์‚ฐ ์—ฐ์‚ฐ์ž

+ ์—ฐ์‚ฐ์ž

  • ์ˆซ์ž ํƒ€์ž…์œผ๋กœ์จ ๋ง์…ˆ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฌธ์ž์—ด ํƒ€์ž…์œผ๋กœ์จ ๋ฌธ์ž์—ด ํ•ฉ์น˜๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ˆซ์ž + ๋ฌธ์ž์—ด์€ ๋ฌธ์ž์—ด ํƒ€์ž…๋‹ˆ๋‹ค

  • ์ˆซ์ž ํƒ€์ž…๊ณผ์˜ ๋ง์…ˆ์—์„œ ๋…ผ๋ฆฌ ํƒ€์ž… true๋Š” 1, false๋Š” 0์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.

  • ๋ฌธ์ž์—ด ํƒ€์ž…๊ณผ์˜ ํ•ฉ์น˜๊ธฐ์—์„œ ๋…ผ๋ฆฌ ํƒ€์ž… true๋Š” "true", false๋Š” "false"๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.

console.log(1 + 2); // number + number ->  3 (number)
console.log( 1 + ''); // number + string -> "1" (string)
console.log(1 + "2"); // number + string -> "12" (string)
console.log(2 + 2 + '1') // number(4) + string('1') -> "41" (string)
console.log(2 + (2 + '1')) // number(2) + string('21') -> "221" (string)
console.log(1 + true); // number + true(1) -> 2 (number)
console.log(1 + false); // number + false(0) -> 1 (number)

console.log('hello' + 'world'); // string + string -> "helloworld" (string)
console.log('hello' + 1); // string + numbmer -> hello1 (string)
console.log('hello' + true); // string + true -> "hellotrue" (string)
console.log('hello' + false); // string + true -> "hellofalse" (string)
console.log(true + false); // true + false -> 1 (number)

- ์—ฐ์‚ฐ์ž

  • ๋‘ ์—ฐ์‚ฐ์ž์˜ ์ฐจ์ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋นˆ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๋ฌธ์ž์—ด๊ณผ์˜ ์—ฐ์‚ฐ์€ NaN์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค

console.log(5 - 2); // 3
console.log(5 - true); // 4
console.log(5 - ''); // 5
console.log(5 - '2'); // 3
console.log(5 - 'hello'); // NaN

* ์—ฐ์‚ฐ์ž

  • ๋‘ ์—ฐ์‚ฐ์ž๋ฅผ ๊ณฑํ•œ๋‹ค.

console.log(4 * 2); // 8
console.log(4 * '100'); // 400
console.log(4 * 'hello'); // NaN
console.log(4 * 'true'); // NaN

/ ์—ฐ์‚ฐ์ž

  • ๋‘ ์—ฐ์‚ฐ์ž๋ฅผ ๋‚˜๋ˆˆ๋‹ค.

  • 0์œผ๋กœ ๋‚˜๋ˆ„๋ฉด Infinity์„ ๋ฐ˜ํ™˜

  • ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด๋กœ ๋‚˜๋ˆ„๋ฉด ์ˆซ์ž๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ์—ฐ์‚ฐ

  • ๊ธ€์ž๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด์€ NaN์„ ๋ฐ˜ํ™˜

console.log(4 / 2); // 2
console.log(4 / 3); // 1.3333333333333333
console.log(4 / 0); // Infinity
console.log(4 / -0); // -Infinity
console.log(4 / '4'); // 1
console.log(4 / 'h'); // NaN

% ์—ฐ์‚ฐ์ž

  • ๋‚˜๋ˆด์„ ๋•Œ์˜ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•œ๋‹ค.

  • NaN, Infinity์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•  ์ˆ˜ ์—†์–ด NaN์„ ๋ฐ˜ํ™˜

console.log(17 % 4); // 1
console.log(-17 % 4); // -1
console.log(3.14 % 3); // 0.14000000000000012
console.log(NaN % 2); // NaN
console.log(Infinity % 2); // NaN

** ์—ฐ์‚ฐ์ž

  • ๊ฑฐ๋“ญ์ œ๊ณฑ์„ ๊ตฌํ•œ๋‹ค.

console.log(2 ** 2) // 2*2 ->  4
console.log(2 ** 2 ** 2) // 2**4 -> 2*2*2*2  16
console.log(2 ** -1) // 1/2 -> 0.5
console.log(2 ** -2) // 1/2 * 1/2 -> 0.25

๋น„๊ต ์—ฐ์‚ฐ์ž

Boolean ๋น„๊ต

  • ๋น„๊ต ์—ฐ์‚ฐ์ž๋“ค์€ ๊ฒฐ๊ณผ ๊ฐ’์œผ๋กœ true, false ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฌธ์ž์—ด ๋น„๊ต

  • ๋ฌธ์ž์—ด์€ ์‚ฌ์ „ํŽธ์ง‘์ˆœ์œผ๋กœ ๋น„๊ต๋œ๋‹ค.

  • ์ฆ‰ ์‚ฌ์ „ ์•ž์ชฝ์— ๋‚˜์˜ค๋Š” ๋ฌธ์ž์—ด์ด ๊ฐ’์ด ๋‚ฎ๋‹ค. a < b < c ...

  • ๋ฌธ์ž์—ด์€ ์•ž์—์„œ๋ถ€ํ„ฐ ํ•œ ๊ธ€์ž์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ๋น„๊ตํ•œ๋‹ค.

  • ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๊ณ  ์•ž์— ๋ฌธ์ž์—ด์ด ๊ฐ™์„ ๊ฒฝ์šฐ, ๋” ๊ธด ๋ฌธ์ž์—ด์ด ๋” ๋†’์€ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

  • ๊ฐ’ ์ˆœ์„œ(ํฌ๊ธฐ): ์ˆซ์ž < ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž < ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž < ํ•œ๊ธ€

console.log('a'<'b') // true
console.log('abuse'<'apple') // true
console.log('ab'<'abc') // true
console.log('a'>'A') // true

== ๊ณผ === ์—ฐ์‚ฐ์ž

  • ==(๋™๋“ฑ ์—ฐ์‚ฐ์ž): ํ”ผ์—ฐ์‚ฐ์ž์˜ ํƒ€์ž…์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ํƒ€์ž… ๋ณ€ํ™˜ ํ›„ ๋น„๊ต

  • ===(์—„๊ฒฉํ•œ ๋™๋“ฑ ์—ฐ์‚ฐ์ž) : ํƒ€์ž… ๋ณ€ํ™˜์—†์ด ๋น„๊ต

console.log(1 == "1"); // true
console.log(1 == [1]); // true
console.log(1 === [1]); // false
console.log(1 === "1"); // false

!! ์—ฐ์‚ฐ์ž

  • ์ˆซ์ž๋Š” 0์ผ ๊ฒฝ์šฐ false

  • ๋ฌธ์ž์—ด์€ ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ false

  • ์˜ˆ์™ธ๊ฐ’ false

  • ๊ฐ์ฒด๋Š” ๋น„์–ด ์žˆ์–ด๋„ true

console.log(!!-1); // true
console.log(!!1); // true
console.log(!!0); // false

console.log(!!"a"); // true
console.log(!!""); // false

console.log(!!true); // true
console.log(!!false); // false

console.log(!!null); // false
console.log(!!NaN); // false
console.log(!!undefined); // false
console.log(!!{}); // true
console.log(!![]); // true

Number.isNaN ์—ฐ์‚ฐ์ž

  • ์—„๊ฒฉํ•œ isNaN ์—ฐ์‚ฐ์ž

isNaN(100 + "a") // true
Number.isNaN(100 + "a") // false

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

|| ์—ฐ์‚ฐ์ž

  • ํ”ผ์—ฐ์‚ฐ์ž ๋“ค์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‰๊ฐ€ํ•˜๋ฉฐ, true๋ฅผ ๋งŒ๋‚˜๋ฉด true๋ฅผ ๋ฐ˜ํ™˜, ์—†๋‹ค๋ฉด false ๋ฐ˜ํ™˜

  • ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ boolean true ๊ฐ’์ด๋ฉด boolean true์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ๊ฐ’์ด๋ฉด ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ๋ชจ๋“  ๊ฐ’์ด falsy์ด๋ฉด ๋งˆ์ง€๋ง‰ ํ”ผ์—ฐ์‚ฐ์ž ๊ฐ’์„ ๋ฐ˜ํ™˜

  • && ์—ฐ์‚ฐ์ž๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ๋‹ค

console.log(3 > 2 || 1 > 4) // true
console.log(3 < 2 || 'hello') // "hello"
console.log(124 || "hello") // 124  : 0์ด ์•„๋‹Œ ์ˆซ์ž๋Š” true์ด๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
console.log(0 || "hello") // "hello" : ์ˆซ์ž 0์€ false์ด๋ฏ€๋กœ "hello"๊ฐ€ true์ด๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
console.log(0 || '') // ''
console.log(0 || null) // null
console.log(true || false && false) // true || false ->  true

&& ์—ฐ์‚ฐ์ž

  • ํ”ผ์—ฐ์‚ฐ์ž๋“ค์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‰๊ฐ€ํ•˜๋ฉฐ, false๋ฅผ ๋งŒ๋‚˜๋ฉด false๋ฅผ ๋ฐ˜ํ™˜, ์—†๋‹ค๋ฉด true ๋ฐ˜ํ™˜

  • ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ boolean false ๊ฐ’์ด๋ฉด boolean false์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ๊ฐ’์ด๋ฉด ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ๋ชจ๋“  ๊ฐ’์ด truthy์ด๋ฉด ๋งˆ์ง€๋ง‰ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜

  • false์ธ ๊ฐ’์€ false, null, NaN, 0, '', undefined ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

console.log(0 && "hello") // 0
console.log(1 && "hello") // "hello"
console.log("foo" && 4) // 4

! ์—ฐ์‚ฐ์ž

  • ๋…ผ๋ฆฌ์  ๋ถ€์ •์œผ๋กœ ์ฐธ์€ ๊ฑฐ์ง“์œผ๋กœ, ๊ฑฐ์ง“์€ ์ฐธ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

  • ๋ฐ˜ํ™˜ ๊ฐ’์ด ํ•ญ์ƒ boolean์ด๋ผ๊ณ  ํ•  ์ˆ˜๋Š” ์—†๋‹ค.

  • boolean๊ฐ’์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด !! ๋˜๋Š” Boolean ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

console.log(!0) // true
console.log(!'') // true
console.log(!'hello') // false
console.log(!true) // false
console.log(!false) // true
console.log(!!NaN) // false

!! ์—ฐ์‚ฐ์ž

  • ! ์—ฐ์‚ฐ์ž๋ฅผ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ boolean ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐ˜๋Œ€์˜ ๋ฐ˜๋Œ€๋Š” ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

console.log(!!0) // !0 -> true, !true -> false

๋น„ํŠธ ์—ฐ์‚ฐ์ž

& ์—ฐ์‚ฐ์ž

  • ๊ฐ ์ž๋ฆฌ์˜ ๋น„ํŠธ์— ๋Œ€ํ•ด์„œ and ์—ฐ์‚ฐ

console.log(2 & 3) // 2

| ์—ฐ์‚ฐ์ž

  • ๊ฐ ์ž๋ฆฌ์˜ ๋น„ํŠธ์— ๋Œ€ํ•ด์„œ or ์—ฐ์‚ฐ

console.log(2 | 1) // 3

^ ์—ฐ์‚ฐ์ž

  • ๊ฐ ์ž๋ฆฌ์˜ ๋น„ํŠธ์— ๋Œ€ํ•ด์„œ xor ์—ฐ์‚ฐ

  • ๊ฐ™์œผ๋ฉด 0, ๋‹ค๋ฅด๋ฉด 1

console.log(15 ^ 1) // 14

~ ์—ฐ์‚ฐ์ž

  • ๊ฐ ์ž๋ฆฌ์˜ ๋น„ํŠธ์— ๋น„ํŠธ๊ฐ€ ์žˆ์œผ๋ฉด 0 ์—†์œผ๋ฉด 1

console.log(~0) // -1
console.log(~1) // -2
console.log(~-1) // -0

<<, >> ์—ฐ์‚ฐ์ž

  • ๊ฐ ์ž๋ฆฌ์˜ ๋น„ํŠธ๋ฅผ ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์›ํ•˜๋Š” ๋งŒํผ ์ด๋™

console.log(2 << 1) // 4
console.log(16 >> 1) // 8

>>> ์—ฐ์‚ฐ์ž

  • ๋ถ€ํ˜ธ์—†๋Š” ์˜ค๋ฅธ์ชฝ ์‹œํ”„ํŠธ ์—ฐ์‚ฐ์ž

  • ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€๋ฆฌ๋Š” ๋น„ํŠธ๋Š” ํ๊ธฐ๋˜๊ณ , 0์€ ์™ผ์ชฝ ๋์œผ๋กœ ์ด๋™ํ•œ๋‹ค

console.log(-1 >>> 1) // 2147483647
console.log(-1 >>> 31) // 1

๊ทธ ์™ธ ์—ฐ์‚ฐ์ž

= ์—ฐ์‚ฐ์ž

  • ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋Œ€์ž…(ํ• ๋‹น)

x = 10;
y = z = x // x -> y -> z

console.log(x) // 10
console.log(y) // 10
console.log(z) // 10

, ์—ฐ์‚ฐ์ž

  • ๊ฐ ํ”ผ์—ฐ์ž๋ฅผ ์™ผ์ชฝ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‰๊ฐ€ํ•˜๊ณ , ๋งˆ์ง€๋ง‰ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜

  • ํ•œ ์ค„์—์„œ ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์ž๋ฅผ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๋‹ค. ๋•Œ๋ฌธ์— ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค..

typeof ์—ฐ์‚ฐ์ž

  • ํƒ€์ž…์„ ๋ฌธ์ž์—ด๋กœ ๋ฆฌํ„ด

console.log(typeof 1); // "number"
console.log(typeof "1"); // "string"
console.log(typeof 1n); // "bigint"
console.log(typeof true); // "boolean"
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function () {}); // "function"
console.log(typeof null); // "object"

instanceof ์—ฐ์‚ฐ์ž

  • object์˜ ํ”„ํ† ํ† ํƒ€์ž… ์ฒด์ธ์— constructor.prototype์ด ์กด์žฌํ•˜๋Š”์ง€ ํŒ๋ณ„

object instanceof constructor

? ์—ฐ์‚ฐ์ž (์‚ผํ•ญ ์—ฐ์‚ฐ์ž)

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์„ธ ๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์œ ์ผํ•œ ์—ฐ์‚ฐ์ž

condition ? exprIfTrue : exprIfFalse
  • else if ๋ฌธ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

condition1 ? value1 
	: condition2 ? value2 
	: value3

?. ์—ฐ์‚ฐ์ž(์„ ํƒ์  ์—ฐ๊ฒฐ; optional chaining)

  • ๊ฐœ์ฒด์˜ ์†์„ฑ์ด๋‚˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ• ๋•Œ, ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์ด undefined์ด๊ฑฐ๋‚˜ null์ผ ๊ฒฝ์šฐ

  • ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ , undefined๋‚˜ null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const user = {
  name: 'foo',
  age: 20
}

console.log(user?.name) // "foo"
console.log(user.a?.b) // undefined
console.log(user.a.b) // "TypeError: Cannot read properties of undefined (reading 'b')"

Last updated