🌸07μž₯. μ—°μ‚°μž

**μ—°μ‚°μž** : ν•˜λ‚˜ μ΄μƒμ˜ ν‘œν˜„μ‹μ„ λŒ€μƒμœΌλ‘œ μ‚°μˆ , ν• λ‹Ή, 비ꡐ, 논리, νƒ€μž…, μ§€μˆ˜ μ—°μ‚° 등을 μˆ˜ν–‰ν•΄ ν•˜λ‚˜μ˜ 값을 λ§Œλ“œλŠ” 것

**ν”Όμ—°μ‚°μž** : μ—°μ‚°μ˜ λŒ€μƒ. κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” ν‘œν˜„μ‹

βœ…7.1 μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ œκ³΅ν•˜λŠ” λ‹€μ–‘ν•œ μ—°μ‚°μž

μ‚°μˆ  μ—°μ‚°μž(arithmetic operator)

ν”Όμ—°μ‚°μžλ₯Ό λŒ€μƒμœΌλ‘œ μˆ˜ν•™μ  계산을 μˆ˜ν–‰ν•΄ μƒˆλ‘œμš΄ 숫자 값을 λ§Œλ“ λ‹€.
λΆˆκ°€λŠ₯ν•œ 경우 **NaN**을 λ°˜ν™˜ν•œλ‹€.
  • 이항 μ‚°μˆ  μ—°μ‚°μž : +,-,*,/,%

  • 단항 μ‚°μˆ  μ—°μ‚°μž : ++,--,+(λ³€ν™” x),-(μ–‘μˆ˜β†’μŒμˆ˜, μŒμˆ˜β†’μ–‘μˆ˜)

  • λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž : + (μ—°κ²°)

  • 증가/κ°μ†Œ(++/--)μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μžμ˜ 값을 λ³€κ²½ν•˜λŠ” λΆ€μˆ˜νš¨κ³Όκ°€ μ‘΄μž¬ν•œλ‹€. 즉, ν”Όμ—°μ‚°μžμ˜ 값을 λ³€κ²½ν•˜λŠ” 암묡적 할당이 이루어진닀. κ·Έ μ™Έ λ‚˜λ¨Έμ§€λŠ” λΆ€μˆ˜νš¨κ³Όκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • λ˜ν•œ, 증가/κ°μ†Œ μ—°μ‚°μžλŠ” μœ„μΉ˜μ— μ˜λ―Έκ°€ μžˆλ‹€.

    var x = 5,
        result;
    
    // μ„ ν• λ‹Ή 후증가(postfix increment operator)
    result = x++;
    console.log(result, x); // 5 6
    
    // 선증가 ν›„ν• λ‹Ή(prefix increment operator)
    result = ++x;
    console.log(result, x); // 7 7
    
    // μ„ ν• λ‹Ή ν›„κ°μ†Œ(postfix decrement operator)
    result = x--;
    console.log(result, x); // 7 6
    
    // μ„ κ°μ†Œ ν›„ν• λ‹Ή (prefix decrement operator)
    result = --x;
    console.log(result, x); // 5 5

ν• λ‹Ή μ—°μ‚°μž(assignment operator)

μš°ν•­μ— μžˆλŠ” ν”Όμ—°μ‚°μžμ˜ 평과 κ²°κ³Όλ₯Ό μ’Œν•­μ— μžˆλŠ” λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€. (λΆ€μˆ˜νš¨κ³Ό O)
  • =, +=, -=, *=, /=, %=

비ꡐ μ—°μ‚°μž(comparison operator)

μ’Œν•­κ³Ό μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λΉ„κ΅ν•œ λ‹€μŒ κ·Έ κ²°κ³Όλ₯Ό λΆˆλ¦¬μ–Έ κ°’μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.
  • 동등/일치 비ꡐ μ—°μ‚°μž : ==,===,!=,!==

  • λŒ€μ†Œκ΄€κ³„ 비ꡐ μ—°μ‚°μž : >,<,>=,<=

동등비ꡐ(loose equality)와 μΌμΉ˜λΉ„κ΅(strict equality) μ—°μ‚°μž

μ’Œν•­κ³Ό μš°ν•­μ˜ ν”Όμ—°μ‚°μžκ°€ 값은 κ°’μœΌλ‘œ ν‰κ°€λ˜λŠ”μ§€ 비ꡐ해 λΆˆλ¦¬μ–Έ 값을 λ°˜ν™˜ν•˜λŠ” μ—°μ‚°μž.
**λΉ„κ΅ν•˜λŠ” 엄격성에 차이가 μžˆλ‹€.**
  • 동등 비ꡐ μ—°μ‚°μž(==)λŠ” μ’Œν•­κ³Ό μš°ν•­μ„ 비ꡐ할 λ•Œ λ¨Όμ € 암묡적 νƒ€μž… λ³€ν™˜μ„ 톡해 νƒ€μž…μ„ μΌμΉ˜μ‹œν‚¨ ν›„ 같은 값인지 λΉ„κ΅ν•œλ‹€.

  • λ°˜λ©΄μ— 일치 비ꡐ μ—°μ‚°μž(===)λŠ” νƒ€μž…λ„ κ°™κ³  값도 같은 κ²½μš°μ— ν•œν•΄ trueλ₯Ό λ°˜ν™˜ν•œλ‹€.

console.log(5 == "5"); // true
console.log(5 === "5"); // false
console.log(5 === 5); // true

NaN, +0 & -0, Object.is() ν•¨μˆ˜

  • NaN은 μžμ‹ κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” μœ μΌν•œ 값이기 λ•Œλ¬Έμ— μˆ«μžκ°€ NaN인지 μ‘°μ‚¬ν•˜λ €λ©΄ 빌트인 ν•¨μˆ˜ Number.isNaN을 μ‚¬μš©ν•΄μ•Όν•œλ‹€.

  • +0κ³Ό -0이 μ‘΄μž¬ν•˜μ§€λ§Œ, 비ꡐ μ—°μ‚°μž μ‚¬μš©μ‹œ, trueλ₯Ό λ°˜ν™˜ν•œλ‹€.

  • λ°˜λ©΄μ—, Object.is()λ©”μ„œλ“œλŠ” 예츑 κ°€λŠ₯ν•œ μ •ν™•ν•œ 비ꡐ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— +0, -0을 κ΅¬λΆ„ν•œλ‹€.

console.log(NaN === NaN); // false
console.log(Number.isNaN(NaN)); // true

console.log(0 === 0); // true
console.log(+0 === -0); // true
console.log(Object.is(+0, -0)); // false

삼항쑰건 μ—°μ‚°μž(ternary operator)

쑰건식 ? 쑰건식이 true일 λ•Œ λ°˜ν™˜ν•˜λŠ” κ°’ : 쑰건식이 false일 λ•Œ λ°˜ν™˜ν•˜λŠ” κ°’
  • 쑰건식 : λΆˆλ¦¬μ–Έ νƒ€μž…μ˜ κ°’μœΌλ‘œ 평가될 ν‘œν˜„μ‹μœΌλ‘œ, νƒ€μž…μ΄ λ‹€λ₯Ό 경우 λΆˆλ¦¬μ–Έ κ°’μœΌλ‘œ 암묡적 νƒ€μž… λ³€ν™˜ λœλ‹€.

  • 쑰건에 따라 μ–΄λ–€ 값을 κ²°μ •ν•΄μ•Ό ν•œλ‹€. β†’ μ‚Όν•­ μ—°μ‚°μž ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λŠ” 편이 유리

  • 쑰건에 따라 μˆ˜ν–‰ν•΄μ•Ό ν•  문이 ν•˜λ‚˜κ°€ μ•„λ‹ˆλΌ μ—¬λŸ¬κ°œλ‹€. β†’ if ~ else λ¬Έ 이 더 가독성 μΈ‘λ©΄μ—μ„œ 유리

논리 μ—°μ‚°μž(logical operator)

μš°ν•­κ³Ό μ’Œν•­μ˜ ν”Όμ—°μ‚°μž(λΆ€μ • 논리 μ—°μ‚°μžμ˜ 경우 μš°ν•­μ˜ ν”Όμ—°μ‚°μž)λ₯Ό 논리 μ—°μ‚°
  • 논리합(||), 논리곱(&&), λΆ€μ •(!)

  • 논리뢀정 μ—°μ‚°μžλŠ” μ–Έμ œλ‚˜ λΆˆλ¦¬μ–Έ κ°’ λ°˜ν™˜(암묡적 νƒ€μž… λ³€ν™˜ μ‹œν–‰)

  • 논리합, 논리곱 μ—°μ‚°μžλŠ” 평가 κ²°κ³Όκ°€ λΆˆλ¦¬μ–Έ 값이 아닐 μˆ˜λ„ 있음 (단좕평가)

    • ex) 'Cat' && 'Dog'; 의 κ²°κ³ΌλŠ” β€˜Dog’

μ‰Όν‘œ μ—°μ‚°μž(,)

μ™Όμͺ½ ν”Όμ—°μ‚°μžλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ μ—°μ‚°μžλ₯Ό ν‰κ°€ν•˜κ³  λ§ˆμ§€λ§‰ 평가 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.
var x, y, z;
console.log((x = 1), (y = 2), (z = 3)); // 3

κ·Έλ£Ή μ—°μ‚°μž

μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„λ₯Ό μ‘°μ ˆν•  수 μžˆλ‹€.

typeof μ—°μ‚°μž

ν”Όμ—°μ‚°μžμ˜ 데이터 νƒ€μž…μ„ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.
  • 총 7가지 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ λ°˜ν™˜

    • string

    • number

    • boolean

    • undefined

    • symbol

    • object

    • function

  • null둜 λ°˜ν™˜ν•˜λŠ” κ²½μš°λŠ” μ—†λ‹€. 값이 null인지 ν™•μΈν•˜κ³  μ‹ΆμœΌλ©΄ === μ‚¬μš©ν•˜κΈ°

μ§€μˆ˜ μ—°μ‚°μž(exponent operator)

  • μ§€μˆ˜ μ—°μ‚°μžλŠ” x**y (x : λ°‘, y: μ§€μˆ˜)

  • μ§€μˆ˜ μ—°μ‚°μžκ°€ λ„μž…λ˜κΈ° μ΄μ „μ—λŠ” Math.pow(x,y) λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν–ˆλ‹€.

Math.pow(2, 2);

// μ§€μˆ˜μ—°μ‚°μžλŠ”
2 ** (2(-5) ** 2);

κ·Έ μ™Έ μ—°μ‚°μž

λΆ€μˆ˜νš¨κ³Όκ°€ μžˆλŠ” μ—°μ‚°μž

λŒ€λΆ€λΆ„μ˜ μ—°μ‚°μžλŠ” λ‹€λ₯Έ μ½”λ“œμ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€. (값을 생성할 뿐)

일뢀 μ—°μ‚°μžλŠ” **λ‹€λ₯Έ μ½”λ“œμ— 영ν–₯을 μ€€λ‹€**. 이λ₯Ό **λΆ€μˆ˜νš¨κ³Ό**라고 ν•œλ‹€.
  • ν• λ‹Ή μ—°μ‚°μž(=), 증가/κ°μ†Œ μ—°μ‚°μž(++/--), deleteμ—°μ‚°μž

βœ…7.2 암묡적 νƒ€μž… λ³€ν™˜(implicit coercion)(=νƒ€μž… κ°•μ œ λ³€ν™˜)

개발자의 μ˜λ„μ™€λŠ” 상관없이 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μ•”λ¬΅μ μœΌλ‘œ νƒ€μž…μ΄ μžλ™λ³€ν™˜λ˜λŠ” ν˜„μƒ
// number + string μ—°μ‚° 경우
"1" + 2; // '12'
1 + "2"; // '12'

// boolean + number μ—°μ‚° 경우
1 + true; // 2
1 + false; // 1

// number + null μ—°μ‚° 경우
1 + null; // 1

// number + undefined μ—°μ‚° 경우
1 + undefined; // NaN ( μ—°μ‚° λΆˆκ°€λŠ₯ )

Last updated