JavaScript : Expressions and Operators 2️⃣

m_ngyeongΒ·2024λ…„ 3μ›” 4일
0

JavaScript

λͺ©λ‘ 보기
9/9
post-thumbnail

🍌 JavaScript


Expressions and Operators 2️⃣

Operators(μ—°μ‚°μž)

Assignment operators(ν• λ‹Ή μ—°μ‚°μž)

ν• λ‹Ή μ—°μ‚°μžλŠ” 였λ₯Έμͺ½ ν”Όμ—°μ‚°μžμ˜ 값을 μ™Όμͺ½ ν”Όμ—°μ‚°μžμ— ν• λ‹Ήν•œλ‹€.
기본적인 ν• λ‹Ή μ—°μ‚°μžλŠ” 였λ₯Έμͺ½μ˜ ν”Όμ—°μ‚°μž 값을 μ™Όμͺ½ ν”Όμ—°μ‚°μž 값에 ν• λ‹Ήν•˜λŠ” λ“±ν˜Έ(=)둜, x = y λŠ” y의 값을 x에 ν• λ‹Ήν•œλ‹€.

μ—°μ‚°κ³Ό 할당을 λ™μ‹œμ— μˆ˜ν–‰ν•˜λŠ” 볡합 ν• λ‹Ή μ—°μ‚°μžλ„ μžˆλ‹€.
x +=y, x >>=y, x &&=y

Arithmetic operators(μ‚°μˆ  μ—°μ‚°μž)

μ‚°μˆ  μ—°μ‚°μžλŠ” ν”Όμ—°μžκ°€ 숫자인 μ—°μ‚°μžμ΄λ©° λͺ¨λ“  μ‚°μˆ  연산은 64λΉ„νŠΈ λΆ€λ™μ†Œμˆ˜μ  μ—°μ‚°μœΌλ‘œ 이뀄진닀.

+, -, *, /, %(λ‚˜λ¨Έμ§€), **(κ±°λ“­μ œκ³±)

  • ν”Όμ—°μ‚°μžκ°€ 숫자둜 λ°”κΏ€ 수 μ—†λŠ” κ°’μ΄κ±°λ‚˜ 계산할 수 없을 λ•Œμ˜ μ—°μ‚° κ²°κ³ΌλŠ” NaN(Not a Number)
  • μ •μˆ˜λΌλ¦¬ λ‚˜λˆ„μ–΄λ„ κ²°κ³ΌλŠ” λΆ€λ™μ†Œμˆ˜μ , 7/2 β†’ 3.5
  • λ‚˜λ¨Έμ§€ μ—°μ‚° %의 ν”Όμ—°μ‚°μžλŠ” λΆ€λ™μ†Œμˆ˜μ , 5/1.5 β†’ 0.5
  • 0 으둜 λ‚˜λˆŒ 경우 Infinityλ₯Ό λ°˜ν™˜
  • + μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μž 쀑 ν•˜λ‚˜κ°€ λ¬Έμžμ—΄μ΄λ©΄ λ‚˜λ¨Έμ§€ ν”Όμ—°μ‚¬μžλ₯Ό λ¬Έμžμ—΄λ‘œ λ§Œλ“¦, 1 + "2month" β†’ "12month"
  • true = 1, false = 0
  • undefinedλŠ” NaN으둜 평가
0/0     	// NaN(계산할 수 μ—†μŒ)
"one"*1 	// NaN(계산할 수 μ—†μŒ)
true+true	// 2(λ…Όλ¦¬κ°’μ˜ νƒ€μž…μ„ 숫자둜 λ°”κΎΈμ–΄ 더함)
1+null		// 1(null을 0으둜 λ°”κΎΈμ–΄ 더함)
1+undefined // NaN(undefinedλ₯Ό NaN으둜 λ°”κΎΈμ–΄ 더함)

πŸ“Œ JavaScript의 μˆ«μžλŠ” IEEE754둜 규쑍된 64λΉ„νŠΈμ˜ λΆ€λ™μ†Œμˆ˜μ μ΄λ‹€.

  • μœ„ κ·œκ²©μ—μ„œ κ°€μˆ˜ 뢀뢄은 1.ddd...d라고 ν‘œν˜„ν•˜λ©°, ddd...d뢀뢄이 52λΉ„νŠΈλ₯Ό μ°¨μ§€ν•œλ‹€. 즉, κ°€μˆ˜ λΆ€λΆ„μ˜ μœ νš¨ν•œ μžλ¦Ώμˆ˜κ°€ 2μ§„μˆ˜ 53μžλ¦¬μ΄λ―€λ‘œ 10μ§„μˆ˜μ˜ μžλ¦Ώμˆ˜λŠ” 253 = 1015.95둜 μ•½ 16μžλ¦¬κ°€ λœλ‹€.
  • 숫자λ₯Ό μžλ¦Ώμˆ˜κ°€ 정해진 λΆ€λ™μ†Œμˆ˜μ μœΌλ‘œ ν‘œν˜„ν•˜μ—¬ κ³„μ‚°ν•˜λ©΄ μ˜€μ°¨κ°€ λ°œμƒν•˜λŠ”λ° 이것을 '정확도 문제'라고 ν•œλ‹€.
  • κ²°κ³Όλ₯Ό 보면 유효 μžλ¦Ώμˆ˜κ°€ 16μžλ¦¬μ—μ„œ 12자리둜 쀄어든 것을 확인할 수 μžˆλ‹€. μ΄λ ‡κ²Œ 값이 κ°€κΉŒμš΄ 두 수λ₯Ό λΊ„μ…ˆν•  λ•Œ 정확도 λ¬Έμ œκ°€ λ°œμƒλ˜λŠ”λ° 이λ₯Ό '정밀도 손싀'이라고 ν•œλ‹€.
  • 10μ§„μˆ˜λ‘œ λ”± λ–¨μ–΄μ§€λŠ” 값도 2μ§„μˆ˜λ‘œ μ—°μ‚°ν•˜κΈ° λ•Œλ¬Έμ— 계산 κ²°κ³Όκ°€ μ–΄κΈ‹λ‚œλ‹€.
console.log(0.16 / 0.2) // 0.7999999999999999
// μ‹€μ œ 계산 κ²°κ³Ό 값은 0.8
console.log(0.16 / 0.2 == 0.8) // false
//해결방법
console.log((Math.abs(0.16/0.2 - 0.8))< 1e-10); // true

Unary operators(단항 μ—°μ‚°μž)

단항 μ—°μ‚°μžλŠ” λͺ¨λ‘κ°€ 뢀사가 μžˆλŠ” μ—°μ‚°μžμ΄λ©° ν”Όμ—°μ‚¬μžλŠ” μ’Œλ³€μ— μžˆμ–΄μ•Ό ν•œλ‹€.

μ—°μ‚°μžμ΄λ¦„(뜻)예제
++증가 μ—°μ‚°μž++a, a++
--κ°μ†Œ μ—°μ‚°μž--a, a--
+ν”Όμ—°μ‚°μžκ°€ 숫자 νƒ€μž…μ΄ μ•„λ‹ˆλ©΄ 숫자둜 λ³€ν™˜μ„ μ‹œλ„+"3"3을 λ°˜ν™˜
-λΆ€ν˜Έ λ°˜μ „-aν”Όμ—°μ‚°μžμ˜ λΆ€ν˜Έλ₯Ό λ°˜λŒ€λ‘œ λ°”κΎΌ 값을 λ°˜ν™˜, aκ°€ 3일 λ•Œ, -aλŠ” -3을 λ°˜ν™˜

증가 μ—°μ‚°μžμ™€ κ°μ†Œ μ—°μ‚°μžλŠ” ν”Όμ—°μ‚¬μžλ₯Ό μ•žμ— ν‘œκΈ°ν•˜λŠ” μ „μœ„ ν‘œκΈ°λ²• 을 μ‚¬μš©ν•˜λŠ”λƒ 뒀에 ν‘œκΈ°ν•˜λŠ” ν›„μœ„ ν‘œκΈ°λ²• 을 μ‚¬μš©ν•˜λŠ”λƒμ— 따라 ν”Όμ—°μ‚¬μžλ₯Ό ν‰κ°€ν•˜λŠ” μ‹œμ μ΄ 달라진닀.

  • μ „μœ„ ν‘œκΈ°λ²• μ‚¬μš© : ν”Όμ—°μ‚°μž 값을 λ°”κΎΌ λ‹€μŒμ— ν”Όμ—°μ‚°μžλ₯Ό 평가
  • ν›„μœ„ ν‘œκΈ°λ²• μ‚¬μš© : ν”Όμ—°μ‚°μž 값을 ν‰κ°€ν•œ λ‹€μŒμ— ν”Όμ—°μ‚°μž 값을 λ°”κΏˆ
  • 증가 μ—°μ‚°μž λ˜λŠ” κ°μ†Œ μ—°μ‚°μžλ₯Ό 연속 μ‚¬μš©μ‹œ μ°Έμ‘° 였λ₯˜ λ°œμƒ
    (a++)++ // ReferenceError
num = 1;
console.log(++num); 	// 2
num = 1;
console.log(num++); 	// 1, 1이 좜λ ₯되고 num에 + 1을 더함

console.log(num++ + 3); // 5, num + 3λ₯Ό κ³„μ‚°ν•˜μ—¬ 좜λ ₯ν•˜κ³  num에 + 1을 더함

πŸ“Œ μ’Œλ³€ κ°’μ΄λž€ λŒ€μž… μ—°μ‚°μžμ˜ μ™Όμͺ½μ— λ‘˜ 수 μžˆλŠ” ν‘œν˜„μ‹μ„ λ§ν•œλ‹€. JSμ—μ„œλŠ” λ³€μˆ˜, 객체의 ν”„λ‘œνΌν‹°, λ°°μ—΄ μš”μ†Œλ₯Ό μ’Œλ³€ κ°’μœΌλ‘œ λ‘˜ 수 μžˆλ‹€.

Arithmetic Assignment operators(μ‚°μˆ  λŒ€μž… μ—°μ‚°μž)

μ‚°μˆ  λŒ€μž… μ—°μ‚°μžλŠ” λŒ€μž… μ—°μ‚°μž(=)와 μ‚°μˆ  μ—°μ‚¬μžλ₯Ό μ‘°ν•©ν•˜μ—¬ κ°„λž΅ν•˜κ²Œ ν‘œκΈ°ν•œ 것이닀.

μ—°μ‚°μžμ˜ˆμ œ
+=a += ba = a + b
-=a -= ba = a - b
*=a *= ba = a * b
/=a /= ba = a / b
%=a %= ba = a % b

πŸ“Œ Math λŠ” μˆ˜ν•™μ μΈ μƒμˆ˜μ™€ ν•¨μˆ˜λ₯Ό μœ„ν•œ 속성과 λ©”μ„œλ“œλ₯Ό 가진 λ‚΄μž₯ 객체이며, 기본적인 μ‚°μˆ  μ—°μ‚°κ³Ό λ³΅μž‘ν•œ μˆ˜ν•™μ  연산을 μ§€μ›ν•œλ‹€.

  • Number μžλ£Œν˜•λ§Œ μ§€μ›ν•˜λ©° BigIntμ™€λŠ” μ‚¬μš©ν•  수 μ—†λ‹€.
  • λ‹€λ₯Έ μ „μ—­ 객체와 달리 MathλŠ” μƒμ„±μžκ°€ μ•„λ‹ˆλ©°, Math의 λͺ¨λ“  속성과 λ©”μ„œλ“œλŠ” 정적이닀.
  • 파이 μƒμˆ˜λŠ” Math.PI둜 μ°Έμ‘°ν•  수 있고, 사인 ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜ x에 λŒ€ν•΄ Math.sin(x)와 같이 ν˜ΈμΆœν•  수 μžˆλ‹€.
  • μƒμˆ˜λŠ” JavaScriptμ—μ„œ κ°€λŠ₯ν•œ μ΅œλŒ€ μ‹€μˆ˜ μ •λ°€λ„λ‘œ μ •μ˜λ˜μ–΄ μžˆλ‹€.


μ°Έκ³ λ¬Έν—Œ,
μ΄μ†Œ νžˆλ‘œμ‹œ, γ€Žλͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ μž…λ¬Έγ€, μ„œμž¬μ› μ—­, κΈΈλ²—, 2019
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Expressions_and_operators

profile
μ‚¬μš©μž κ²½ν—˜ ν–₯상과 지속적인 μ„±μž₯을 μΆ”κ΅¬ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ 개발자 ΚšΘ‰Ιž

0개의 λŒ“κΈ€