πŸ“•μ±…/λ”₯λ‹€μ΄λΈŒ

7μž₯ μ—°μ‚°μž

eazyseon 2023. 11. 14. 09:48
λ°˜μ‘ν˜•

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

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

 

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

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

 

- 7.1.1 이항 μ‚°μˆ  μ—°μ‚°μž (+ , - ,  * ,  / ,  %)

2개의 ν”Όμ—°μ‚°μžλ₯Ό μ‚°μˆ  μ—°μ‚°ν•˜μ—¬ 숫자 값을 λ§Œλ“ λ‹€. μ–Έμ œλ‚˜ μƒˆλ‘œμš΄ 값을 λ§Œλ“ λ‹€. 

 

- 7.1.2 λ‹¨ν•­ μ‚°μˆ  μ—°μ‚°μž (++ , -- , + , -)

1개의 ν”Όμ—°μ‚°μžλ₯Ό μ‚°μˆ  μ—°μ‚°ν•˜μ—¬ 숫자 값을 λ§Œλ“ λ‹€. ++와 --λŠ” ν”Όμ—°μ‚°μžμ˜ 값을 λ³€κ²½ν•˜λŠ” λΆ€μˆ˜ νš¨κ³Όκ°€ μžˆμ–΄ 암묡적 할당이 이루어진닀.

 

++,-- λŠ” μœ„μΉ˜μ— 따라 μ „μœ„/ν›„μœ„λ‘œ λ‚˜λ‰˜λŠ”λ° 

μ „μœ„ 증가/κ°μ†Œ μ—°μ‚°μžμΌ κ²½μš°μ—λŠ” 값을 증가/κ°μ†Œμ‹œν‚¨ ν›„, λ‹€λ₯Έ 연산을 μˆ˜ν–‰ν•œλ‹€. 

var x = 5, result;

// 선증가 ν›„ν• λ‹Ή
result = ++x;
console.log(result, x); // 6 6

// μ„ κ°μ†Œ ν›„ν• λ‹Ή 
result = --x;
console.log(result, x); // 5 5

 

ν›„μœ„ 증가/κ°μ†Œ μ—°μ‚°μžλŠ” λ‹€λ₯Έ 연산을 μˆ˜ν–‰ν•œ ν›„, ν”Όμ—°μ‚°μžμ˜ 값을 증가/κ°μ†Œμ‹œν‚¨λ‹€. 

var x = 5, result;

// μ„ ν• λ‹Ή 후증가
result = x++;
console.log(result, x); // 5 6

// μ„ ν• λ‹Ή ν›„κ°μ†Œ
result = x--;
console.log(result, x); // 6 5

 

λ˜ν•œ, 숫자 νƒ€μž…μ΄ μ•„λ‹Œ ν”Όμ—°μ‚°μžμ— +단항 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄ ν”Όμ—°μ‚°μžλ₯Ό 숫자 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€. 

-단항 μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μžμ˜ λΆ€ν˜Έλ₯Ό λ°˜μ „ν•œ 값을 λ°˜ν™˜ν•œλ‹€. 그리고 ν”Όμ—°μ‚°μžλ₯Ό 숫자 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€. 

 

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

+μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μž 쀑 ν•˜λ‚˜ 이상이 λ¬Έμžμ—΄μΈ 경우 λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μžλ‘œ λ™μž‘ν•œλ‹€. 

// λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž
'1' + 2; // -> '12'
1 + '2'; // -> '12'

// μ‚°μˆ  μ—°μ‚°μž
1 + 2; // -> 3

// trueλŠ” 1둜 νƒ€μž… λ³€ν™˜λœλ‹€.
1 + true; // -> 2

// falseλŠ” 0으둜 νƒ€μž… λ³€ν™˜λœλ‹€.
1 + false; // -> 1

// null은 0으둜 νƒ€μž… λ³€ν™˜λœλ‹€.
1 + null; // -> 1

// undefinedλŠ” 숫자둜 νƒ€μž… λ³€ν™˜λ˜μ§€ μ•ŠλŠ”λ‹€.
+undefined;    // -> NaN
1 + undefined; // -> NaN

개발자의 μ˜λ„μ™€ 상관없이 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ νƒ€μž…μ΄ μžλ™ λ³€ν™˜λ˜κΈ°λ„ ν•œλ‹€λŠ” 것이닀. 

이λ₯Ό 암묡적 νƒ€μž… λ³€ν™˜  or νƒ€μž… κ°•μ œ λ³€ν™˜ 이라고 ν•œλ‹€. 

 

7.2 ν• λ‹Ή μ—°μ‚°μž (= , += , -= , *= , /= , %=)

μš°ν•­μ— μžˆλŠ” ν”Όμ—°μ‚°μžμ˜ 평가 κ²°κ³Όλ₯Ό μ’Œν•­μ— μžˆλŠ” λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€.

 

let x;

x = 10;
console.log(x); // 10

x += 5; // x = x + 5;
console.log(x); // 15

x -= 5; // x = x - 5;
console.log(x); // 10

x *= 5; // x = x * 5;
console.log(x); // 50

x /= 5; // x = x / 5;
console.log(x); // 10

x %= 5; // x = x % 5;
console.log(x); // 0

let str = 'My name is ';

// λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž
str += 'Lee'; // str = str + 'Lee';
console.log(str); // 'My name is Lee'

 

7.3 비ꡐ μ—°μ‚°μž 

μ’Œν•­κ³Ό μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λΉ„κ΅ν•œ λ‹€μŒ κ·Έ κ²°κ³Όλ₯Ό λΆˆλ¦¬μ–Έ κ°’μœΌλ‘œ λ°˜ν™˜ν•œλ‹€. 

- 7.3.1 동등/일치 비ꡐ μ—°μ‚°μž (== , === , != , !==)

동등 비ꡐ μ—°μ‚°μžλŠ” 암묡적 νƒ€μž… λ³€ν™˜μ„ 톡해 νƒ€μž…μ„ μΌμΉ˜μ‹œν‚¨ ν›„ 같은 값인지 λΉ„κ΅ν•œλ‹€. (νƒ€μž…μ΄ 달라도 νƒ€μž… λ³€ν™˜ ν›„ 같은 값이면 true λ°˜ν™˜)

5 == "5" //true

 

일치 비ꡐ μ—°μ‚°μžλŠ” μ’Œν•­κ³Ό μš°ν•­μ˜ ν”Όμ—°μ‚°μžκ°€ νƒ€μž…λ„ κ°™κ³  값도 같은 κ²½μš°μ— ν•œν•˜μ—¬ trueλ₯Ό λ°˜ν™˜ν•œλ‹€. 

5 == "5" //false

 

주의 ) NaN (μžμ‹ κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” μœ μΌν•œ 값이닀. μˆ«μžκ°€ NaN인지 μ‘°μ‚¬ν•˜λ €λ©΄ isNaN을 μ‚¬μš©ν•œλ‹€.)

NaN === NaN  //false

 

주의 ) 0 (μ–‘μ˜ 0κ³Ό 음의 0을 λΉ„κ΅ν•˜λ©΄ trueλ₯Ό λ°˜ν™˜ν•œλ‹€)

0 === -0  //true

 

뢀동등 비ꡐ μ—°μ‚°μž(!==, !=)λŠ” λ°˜λŒ€μ˜ κ°œλ…μ΄λ‹€. 

 

- 7.3.2 λŒ€μ†Œ 관계 비ꡐ μ—°μ‚°μž(> , < , <= , >=)

λŒ€μ†Œ 관계 비ꡐ μ—°μ‚°μžλŠ” λΆˆλ¦¬μ–Έ 값을 λ°˜ν™˜ν•œλ‹€. 

5 > 0;  // -> true
5 > 5;  // -> false
5 >= 5; // -> true
5 <= 5; // -> true

 

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

μ‘°κ±΄μ‹μ˜ 평가 결과에 따라 λ°˜ν™˜ν•  값을 κ²°μ •ν•œλ‹€.

쑰건식 ? true일 λ•Œ λ°˜ν™˜ν•  κ°’ : false일 λ•Œ λ°˜ν™˜ν•  κ°’

 

if...else 문은 ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문이닀. λ”°λΌμ„œ κ°’μ²˜λŸΌ μ‚¬μš©ν•  μˆ˜ μ—†λ‹€.

μ‚Όν•­ 쑰건 μ—°μ‚°μž ν‘œν˜„μ‹μ€ ν‘œν˜„μ‹μΈ 문이닀. λ”°λΌμ„œ κ°’μ²˜λŸΌ μ‚¬μš©ν•  μˆ˜ μžˆλ‹€.

let x = 10;

let result = if (x % 2) {
result = 'ν™€μˆ˜';
} else { 
result = '짝수'; };
// SyntaxError: Unexpected token if

let result = x % 2 ? 'ν™€μˆ˜' : '짝수';
console.log(result); // 짝수

 

7.5 논리 μ—°μ‚°μž (|| , && , !)

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

// 논리합(||) μ—°μ‚°μž
true || true;   // -> true
true || false;  // -> true
false || true;  // -> true
false || false; // -> false

// 논리곱(&&) μ—°μ‚°μž
true && true;   // -> true
true && false;  // -> false
false && true;  // -> false
false && false; // -> false

// 논리 λΆ€μ •(!) μ—°μ‚°μž
!true;  // -> false
!false; // -> true

 

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

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

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

 

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

μ†Œκ΄„ν˜Έλ‘œ ν”Όμ—°μ‚°μžλ₯Ό 감싸 μžμ‹ μ˜ ν”Όμ—°μ‚°μž ν‘œν˜„μ‹μ„ κ°€μž₯ λ¨Όμ € ν‰κ°€ν•œλ‹€. μš°μ„ μˆœμœ„κ°€ κ°€μž₯ λ†’λ‹€. 

10 * 2 + 3; // 23
10 * ( 2 + 3 ); // 50

 

7.8 typeof μ—°μ‚°μž
ν”Όμ—°μ‚°μžμ˜ 데이터 νƒ€μž…μ„ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•œλ‹€. null을 λ°˜ν™˜ν•˜λŠ” κ²½μš°λŠ” μ—†μœΌλ©° ν•¨μˆ˜λŠ” function으둜 λ°˜ν™˜ν•œλ‹€. 

 

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

μ’Œν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λ°‘μœΌλ‘œ μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό μ§€μˆ˜λ‘œ κ±°λ“­ μ œκ³±ν•˜μ—¬ 숫자λ₯Ό λ°˜ν™˜ν•œλ‹€. 

    2 ** 2;   // -> 4
    2 ** 2.5; // -> 5.65685424949238
    2 ** 0;   // -> 1
    2 ** -2;  // -> 0.25

 

7.12 μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„

()κ°€ 1μˆœμœ„μ΄λ‹€!

λ°˜μ‘ν˜•