ν‹°μŠ€ν† λ¦¬ λ·°

μ—°μ‚°μžμ™€ ν”Όμ—°μ‚°μžλž€?

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ—°μ‚°μžμ— λŒ€ν•΄ μ•Œμ•„λ³΄κΈ°μ „, μ—°μ‚°μžμ™€ ν”Όμ—°μ‚°μžμ— λŒ€ν•œ μ •μ˜λ₯Ό λ¨Όμ € ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

μš©μ–΄ μ„€λͺ…
μ—°μ‚°μž(Operator) ν•˜λ‚˜ μ΄μƒμ˜ ν‘œν˜„μ‹μ„ λŒ€μƒμœΌλ‘œ μ‚°μˆ , ν• λ‹Ή, 비ꡐ, 논리, νƒ€μž…, μ§€μˆ˜ μ—°μ‚° 등을 μˆ˜ν–‰ν•˜λŠ” 기호
ν”Όμ—°μ‚°μž(Operand) 연산에 μ°Έμ—¬ν•˜λŠ” κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” λͺ¨λ“  ν‘œν˜„μ‹(λ³€μˆ˜, μƒμˆ˜ λ“±)으둜 μ—°μ‚°μ˜ λŒ€μƒ

예λ₯Ό λ“€μ–΄μ„œ 3 + 7  연산이 주어진닀면, 3κ³Ό7은 ν”Όμ—°μ‚°μžκ³  +κ°€ μ—°μ‚°μžκ°€ λ©λ‹ˆλ‹€.

 

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

λΆ€μˆ˜νš¨κ³Όλž€ ν”Όμ—°μ‚°μžμ˜ 값을 λ³€κ²½ν•˜λŠ” λ“± λ‹€λ₯Έ μ½”λ“œμ— 영ν–₯을 μ£ΌλŠ” 것을 λ§ν•©λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ μ—°μž”μžλŠ” λΆ€μˆ˜νš¨κ³Όκ°€ μ—†μœΌλ‚˜, ν• λ‹Ή μ—°μ‚°μž(=), 증가/κ°μ†Œ μ—°μ‚°μž(++/--), deleteμ—°μ‚°μžλŠ” λΆ€μˆ˜νš¨κ³Όκ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

μ‚°μˆ  μ—°μ‚°μž

ν”Όμ—°μ‚°μžλ₯Ό λŒ€μƒμœΌλ‘œ μˆ˜ν•™μ  계산을 μˆ˜ν–‰ν•΄ μƒˆλ‘œμš΄ 숫자 값을 λ§Œλ“­λ‹ˆλ‹€. λ§Œμ•½, λΆˆκ°€λŠ₯ν•œ 경우 NaN을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

 

단항 μ‚°μˆ  μ—°μ‚°μž (1개의 ν”Όμ—°μ‚°μž)

단항 μ‚°μˆ  μ—°μ‚°μž 의미 λΆ€μˆ˜ 효과
++ 증가 O
-- κ°μ†Œ O
+ μ–΄λ– ν•œ νš¨κ³Όλ„ μ—†μŒ X
- μ–‘μˆ˜μ™€ 음수λ₯Ό μ„œλ‘œ λ°˜μ „ν•œ 값을 λ°˜ν™˜ X
var num = 1;
num++; // num = num + 1 = 2

이항 μ‚°μˆ  μ—°μ‚°μž (2개의 ν”Όμ—°μ‚°μž)

이항 μ‚°μˆ  μ—°μ‚°μž 의미 λΆ€μˆ˜ 효과
+ λ§μ…ˆ X
- λΊ„μ…ˆ X
* κ³±μ…ˆ X
/ λ‚˜λˆ—μ…ˆ X
% λ‚˜λ¨Έμ§€ X

λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž

+ μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μž 쀑 ν•˜λ‚˜ 이상이 λ¬Έμžμ—΄μΈ 경우 λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μžλ‘œ λ™μž‘ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œμ™€ 같이 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ•”λ¬΅μ μœΌλ‘œ(κ°•μ œμ μœΌλ‘œ)νƒ€μž…μ„ λ³€ν™˜ν•©λ‹ˆλ‹€.

'1' + 2; // '12'
1 + '2'; // '12'

1 + true; // 2 (true 은 1둜 νƒ€μž… λ³€ν™˜)

1 + null; // 1 (null 은 0으둜 νƒ€μž… λ³€ν™˜)

+undefined; // NaN
1 + undefined; // NaN

 

ν• λ‹Ή μ—°μ‚°μž

ν• λ‹Ή μ—°μž”μ‚¬λŠ” μš°ν•­μ— μžˆλŠ” ν”Όμ—°μ‚°μžμ˜ 평가 κ²°κ³Όλ₯Ό μ’Œν•­μ— μžˆλŠ” λ³€μˆ˜μ— ν• λ‹Ήν•©λ‹ˆλ‹€. μ΄λŠ” μ’Œν•­μ˜ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜λ―€λ‘œ λ³€μˆ˜ 값이 λ³€ν•˜λŠ” λΆ€μˆ˜ νš¨κ³Όκ°€ μžˆμŠ΅λ‹ˆλ‹€.

ν• λ‹Ή μ—°μ‚°μž 예 동일 ν‘œν˜„ λΆ€μˆ˜ 효과
= x = 5 x = 5 O
+= x += 5 x = x + 5 O
-= x -= 5 x = x - 5 O
*= x *= 5 x = x * 5 O
/= x /= 5 x = x / 5 O
%= x %= 5 x = x % 5 O

연쇄 ν• λ‹Ή

μ‹€μ œ κ°œλ°œμ„ μ§„ν–‰ν•˜λ‹€λ³΄λ©΄ μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ²Œ λ§Œλ“€κΈ° μœ„ν•΄ ν• λ‹Ή μ—°μ‚°μžλ₯Ό 많이 ν™œμš©ν•˜κ²Œ λ˜λŠ”κ²ƒ κ°™μŠ΅λ‹ˆλ‹€. λ˜ν•œ 연쇄 할당을 톡해 ν•œλ²ˆμ— μ—¬λŸ¬ λ³€μˆ˜μ— λ™μΌν•œ 값을 ν• λ‹Ήν•΄ μ½”λ“œ 라인을 λ‹¨μΆ•μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

// 연쇄 ν• λ‹Ή μ˜ˆμ‹œ
var a, b, c;
a = b = c = 0;
console.log(a,b,c); // 0 0 0

 

 

비ꡐ μ—°μ‚°μž

μ’Œν•­κ³Ό μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λΉ„κ΅ν•œ λ‹€μŒ κ·Έ κ²°κ³Όλ₯Ό booleanκ°’μœΌλ‘œ λ°˜ν™˜ν•΄μ€λ‹ˆλ‹€. 주둜 ifλ¬Έ, forλ¬Έκ³Ό 같은 μ œμ–΄λ¬Έμ˜ μ‘°κ±΄μ‹μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

 

동등/일치 비ꡐ μ—°μ‚°μž

μ’Œμš°ν•­μ˜ ν”Όμ—°μ‚°μžκ°€ 같은 κ°’μœΌλ‘œ ν‰κ°€λ˜λŠ”μ§€ 비ꡐ해 λΆˆλ¦¬μ–Έ 값을 λ°˜ν™˜λŠ”λ°, λΉ„κ΅ν•˜λŠ” μ—„κ²©μ„±μ˜ 정도에 따라 λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€. 

비ꡐ μ—°μ‚°μž 의미 사둀 μ„€λͺ… λΆ€μˆ˜ 효과
== 동등 비ꡐ x == y x와 y의 값이 κ°™μŒ X
=== 일치 비ꡐ x === y x와 y의 κ°’κ³Ό νƒ€μž…μ΄ κ°™μŒ X
!= 뢀동등 비ꡐ x != y x와 y의 값이 닀름 X
!== 뢈일치 비ꡐ x !== y x와y의 κ°’κ³Ό νƒ€μž…μ΄ 닀름 X

** NaN은 μžμ‹ κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” μœ μΌν•œ κ°’μ΄λ―€λ‘œ NaN === NaN 은 falseκ°€ 됨. λ”°λΌμ„œ Number.isNaN()ν•¨μˆ˜λ₯Ό ν™œμš©ν•¨

 

λŒ€μ†Œ 관계 비ꡐ μ—°μ‚°μž

ν”Όμ—°μ‚°μžλ“€μ˜ 크기λ₯Ό λΉ„κ΅ν•˜μ—¬ boolean값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

λŒ€μ†Œ 관계 비ꡐ μ—°μ‚°μž 예제 μ„€λͺ… λΆ€μˆ˜ 효과
> x > y xκ°€ y보닀 크닀 X
< x < y xκ°€ y보닀 μž‘λ‹€ X
>= x >= y xκ°€ y보닀 ν¬κ±°λ‚˜ κ°™λ‹€ X
<= x <= y xκ°€ y보닀 μž‘κ±°λ‚˜ κ°™λ‹€ X

 

μ‚Όν•­ 쑰건 μ—°μ‚°μž

μ‘°κ±΄μ‹μ˜ 평가 결과에 따라 λ°˜ν™˜ν•  값을 κ²°μ •ν•˜λŠ” μ‚Όν•­ 쑰건 μ—°μ‚°μžλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μœ μΌν•œ μ‚Όν•­ μ—°μ‚°μžμ΄λ©° λΆ€μˆ˜νš¨κ³Όκ°€ μ—†μŠ΅λ‹ˆλ‹€.

쑰건식 ? 쑰건식이 true 일 λ•Œ λ°˜ν™˜ κ°’ : 쑰건식이 false일 λ•Œ λ°˜ν™˜ κ°’
var x = 2;

// 2 % 2 λŠ” 0μ΄λ―€λ‘œ false둜 인식됨 
var result = x % 2 ? 'ν™€μˆ˜' : '짝수'; // 짝수

논리 μ—°μ‚°μž

μ’Œμš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό 논리 μ—°μ‚°ν•©λ‹ˆλ‹€.

논리 μ—°μ‚°μž 의미 λΆ€μˆ˜ 효과
|| 논리합(OR) X
&& 논리곱(AND) X
! λΆ€μ •(NOT) X

μ‰Όν‘œ μ—°μ‚°μž

μ™Όμͺ½ ν”Όμ—°μ‚°μžλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ ν”Όμ—°μ‚°μžλ₯Ό ν‰κ°€ν•˜κ³  λ§ˆμ§€λ§‰ ν”Όμ—°μ‚°μžμ˜ 평가가 λλ‚˜λ©΄ λ§ˆμ§€λ§‰ ν”Όμ—°μ‚°μžμ˜ 평가 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

var x, y, z;

x = 1, y = 2, z = 3; // 3

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

μ†Œκ΄„ν˜Έ '()' 둜 ν”Όμ—°μ‚°μžλ₯Ό 감싸면, ν•΄λ‹Ή ν‘œν˜„μ‹μ„ κ°€μž₯ λ¨Όμ € ν‰κ°€ν•˜κ²Œ 되고 이λ₯Ό κ·Έλ£Ή μ—°μ‚°μžλΌκ³  ν•©λ‹ˆλ‹€.

10 * 2 + 3; // 23

10 * (2 + 3); // 50

typeof μ—°μ‚°μž

ν”Όμ—°μ‚°μžμ˜ 데이터 νƒ€μž…μ„ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•΄μ€λ‹ˆλ‹€. typeofμ—°μ‚°μžλŠ” 7가지 λ¬Έμžμ—΄ "string", "number", "boolean", "undefined", "symbol", "object", "function" 쀑 1개λ₯Ό λ°˜ν™˜κ°’μœΌλ‘œ κ°€μ§‘λ‹ˆλ‹€.

typeof ''; // "string"
typeof NaN; // "number"
typeof null; // "object"
typeof function () {}; // "function"

μ§€μˆ˜ μ—°μ‚°μž

ES7μ—μ„œ λ„μž…λœ μ—°μ‚°μžλ‘œ μ’Œν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λ°‘(base)둜, μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό μ§€μˆ˜(exponent)둜 μ‚¬μš©ν•˜μ—¬ κ±°λ“­ μ œκ³±μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

2 ** 2; // 4
2 ** 2.5 // 5.65685424949238

// 이항 μ—°μ‚°μž μ€‘μ—μ„œ μ§€μˆ˜ μ—°μ‚°μžκ°€ κ°€μž₯ μš°μ„ μˆœμœ„κ°€ λ†’μŒ
2 * 5 ** 2; // 50

 

μœ„μ— μ†Œκ°œν•œ μ—°μ‚°μž 외에도 ?., ??, delete, new, instanceof, in λ“± λ‹€μ–‘ν•œ μ—°μ‚°μžκ°€ μ‘΄μž¬ν•˜μ§€λ§Œ μ΄λŠ” 좔후에 μ„€λͺ…ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

 

[좜처] λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive

https://wikibook.co.kr/mjs/

 

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive: μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κΈ°λ³Έ κ°œλ…κ³Ό λ™μž‘ 원리

269개의 κ·Έλ¦Όκ³Ό 원리λ₯Ό νŒŒν—€μΉ˜λŠ” μ„€λͺ…μœΌλ‘œ ‘μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κΈ°λ³Έ κ°œλ…κ³Ό λ™μž‘ 원리’λ₯Ό μ΄ν•΄ν•˜μž! μ›ΉνŽ˜μ΄μ§€μ˜ λ‹¨μˆœν•œ 보쑰 κΈ°λŠ₯을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ œν•œμ μΈ μš©λ„λ‘œ νƒœμ–΄λ‚œ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 과도

wikibook.co.kr