JavaScript : Expressions and Operators 1️⃣

m_ngyeongΒ·2024λ…„ 1μ›” 20일
0

JavaScript

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

🍌 JavaScript


Expressions and Operators 1️⃣

Expressions(ν‘œν˜„μ‹)

Expressions(ν‘œν˜„μ‹)μ΄λž€ 값을 λ°˜ν™˜ν•˜λŠ” μœ νš¨ν•œ 식 λ˜λŠ” μ½”λ“œμ΄λ©°, 숫자, λ¬Έμžμ—΄, 논리값 λ“±μ˜ μ›μ‹œ 값이닀.

λͺ¨λ“  ν‘œν˜„μ‹μ€ ꡬ문이 μœ νš¨ν•˜λ‹€λ©΄ μ–΄λ–€ κ°’μœΌλ‘œ μ΄ν–‰λ˜μ§€λ§Œ, κ°œλ…μ μœΌλ‘œλŠ” 2 가지 λ²”μ£Όλ‘œ λ‚˜λ‰œλ‹€.

  • λΆ€μˆ˜ νš¨κ³Όκ°€ μžˆλŠ”(λ³€μˆ˜μ— 값을 λ°”κΎΈλŠ”)ν‘œν˜„μ‹, ex) x = 7
    x = 7 ν‘œν˜„μ‹μ€ =μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ„œ κ°’ 7을 xλ³€μˆ˜μ— ν• λ‹Ήν•˜λ―€λ‘œ ν‘œν˜„μ‹ μžμ²΄λ„ 7둜 평가됨
  • ν‰κ°€ν•˜λ©΄ μ–΄λ–€ κ°’μœΌλ‘œ μ΄ν–‰ν•˜λŠ” ν‘œν˜„μ‹, ex) 3 + 4
    3 + 4 ν‘œν˜„μ‹μ€ +μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ„œ 3κ³Ό 4λ₯Ό λ”ν•˜μ§€λ§Œ 결과인 7을 λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ”μ§€λŠ” μ•ŠμŒ

Js Expressions

  • Arithmetic(μ‚°μˆ˜) : 숫자(3.14159)둜 평가, μ‚°μˆ  μ—°μ‚°μž μ‚¬μš©
  • String(λ¬Έμžμ—΄) : λ¬Έμžμ—΄("ν”„λ ˆλ””", "412")둜 평가, λ¬Έμžμ—΄ μ—°μ‚°μž μ‚¬μš©
  • Boolean(논리) : μ°Έμ΄λ‚˜ κ±°μ§“μœΌλ‘œ 평가, 논리 μ—°μ‚°μžλ₯Ό 포함
  • Basic expressions(일차 ν‘œν˜„μ‹) : JS의 keywordλ‚˜ 일반 ν‘œν˜„μ‹
  • Left-Side expression(μ’Œλ³€ ν‘œν˜„μ‹) : μ’Œλ³€ 값은 ν• λ‹Ήμ˜ λŒ€μƒ(λͺ©μ μ§€)

Basic expressions(일반 ν‘œν˜„μ‹)

this

this ν‚€μ›Œλ“œλ₯Ό .μ΄λ‚˜ [] ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜μ—¬ ν˜„μž¬ 객체λ₯Ό μ°Έμ‘°ν•œλ‹€. 일반적으둜 thisλŠ” λ©”μ„œλ“œμ˜ 호좜 객체λ₯Ό μ°Έμ‘°ν•œλ‹€.

this["propertyName"];
this.propertyName;

μ˜ˆμ‹œ) μ΅œλŒ€μ™€ μ΅œμ†Œ 값을 λ°›μ•„μ„œ, μ–΄λ–€ 객체의 value 속성 μœ νš¨μ„±μ„ κ²€μ¦ν•˜λŠ” validateλΌλŠ” ν•¨μˆ˜λ₯Ό κ°€μ •

function validate(obj, lowval, hival) {
  if (obj.value < lowval || obj.value > hival) {
    console.log("Invalid Value!");
  }
}
<p>18κ³Ό 99 μ‚¬μ΄μ˜ 수λ₯Ό μž…λ ₯:</p>
<input type="text" name="age" size="3" onchange="validate(this, 18, 99);" />

Grouping operator

κ·Έλ£Ή μ—°μ‚°μž ()λŠ” ν‘œν˜„μ‹ ν‰κ°€μ˜ μš°μ„ μˆœμœ„λ₯Ό μ‘°μ ˆν•œλ‹€. 예λ₯Ό λ“€μ–΄, κ³±ν•˜κΈ°μ™€ λ‚˜λˆ„κΈ°λ³΄λ‹€ λ”ν•˜κΈ°μ™€ λΉΌκΈ° 연산을 λ¨Όμ € μˆ˜ν–‰ν•  수 μžˆλ‹€.

const a = 1;
const b = 2;
const c = 3;

// κΈ°λ³Έ μš°μ„ μˆœμœ„μ—μ„œλŠ”
a + b * c; // 7
// 이런 μˆœμ„œλ‘œ 평가함
a + (b * c); // 7

// μš°μ„ μˆœμœ„ μž¬μ •μ˜
// κ³±ν•˜κΈ°λ³΄λ‹€ λ”ν•˜κΈ°λ₯Ό λ¨Όμ € μˆ˜ν–‰
(a + b) * c; // 9

// ...ν•˜λ©΄ μ•„λž˜μ™€ κ°™μŒ
a * c + b * c; // 9

Left-Side expression(μ’Œλ³€ ν‘œν˜„μ‹)

new

newμ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄ user-defined object type(μ‚¬μš©μž μ •μ˜ 객체 νƒ€μž…)μ΄λ‚˜ built-in object types(λ‚΄μž₯ 객체 νƒ€μž…)의 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μžˆλ‹€.

const objectName = new ObjectType(param1, param2, /* …, */ paramN);

super

superν‚€μ›Œλ“œλŠ” 객체의 λΆ€λͺ¨κ°€ 가진 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©ν•œλ‹€. 예λ₯Ό λ“€μ–΄, ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨μ˜ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•  λ•Œ μœ μš©ν•˜κ²Œ μ“Έ 수 μžˆλ‹€.

super(args); // λΆ€λͺ¨ μƒμ„±μž 호좜
super.functionOnParent(args);

πŸ“Œ 'ν‘œν˜„μ‹μ„ ν‰κ°€ν•œλ‹€'λŠ” ν‘œν˜„μ‹μ˜ κ°’κ³Ό λ³€μˆ˜, ν•¨μˆ˜ λ“±μ˜ 값을 κ³„μ‚°ν•˜λŠ” ν–‰μœ„λ₯Ό λ§ν•œλ‹€.

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

a + bμ—μ„œ +λŠ” operator(μ—°μ‚°μž)이고 a와 bλŠ” μ—°μ‚° λŒ€μƒμ΄ λ˜λŠ” ν‘œν˜„μ‹μ΄λ©°, 이λ₯Ό operand(ν”Όμ—°μ‚°μž)라고 λΆ€λ₯Έλ‹€.

  • Assignment operators(ν• λ‹Ή μ—°μ‚°μž)
  • Comparison operators(비ꡐ μ—°μ‚°μž)
  • Arithmetic operators(μ‚°μˆ  μ—°μ‚°μž)
  • Bitwise operators(λΉ„νŠΈ μ—°μ‚°μž)
  • Logical operators(논리 μ—°μ‚°μž)
  • String operators(λ¬Έμžμ—΄ μ—°μ‚°μž)
  • Conditional[ternary] operator(쑰건[μ‚Όν•­] μ—°μ‚°μž)
  • Comma operator(μ‰Όν‘œ μ—°μ‚°μž)
  • Unary operators(단항 μ—°μ‚°μž)
  • Relational operators(관계 μ—°μ‚°μž)

JavaScriptλŠ” 이항 μ—°μ‚°μžμ™€ 단항 μ—°μ‚°μžλ₯Ό λͺ¨λ‘ ν¬ν•¨ν•˜λ©°, μœ μΌν•œ μ‚Όν•­ μ—°μ‚°μžλ‘œ 쑰건 μ—°μ‚°μžλ„ 가지고 μžˆλ‹€. 이항 μ—°μ‚°μžλŠ” μ—°μ‚°μžμ˜ μ•žκ³Ό 뒀에 ν•˜λ‚˜μ”© 총 두 개의 ν”Όμ—°μ‚°μžκ°€ ν•„μš”ν•˜λ‹€.이항 μ—°μ‚°μžμ˜ μ˜ˆμ‹œλ‘œλŠ” 3+4와 x*yμžˆλ‹€.

ν”Όμ—°μ‚°μž1 μ—°μ‚°μž ν”Όμ—°μ‚°μž2

단항 μ—°μ‚°μžλŠ” μ—°μ‚°μžμ˜ μ•žμ΄λ‚˜ 뒀에 ν•˜λ‚˜μ˜ ν”Όμ—°μ‚°μžκ°€ ν•„μš”ν•˜λ‹€.
단항 μ—°μ‚°μžμ˜ μ˜ˆμ‹œλ‘œλŠ” x++ λ˜λŠ” ++xκ°€ μžˆλ‹€.

μ—°μ‚°μž ν”Όμ—°μ‚°μž
ν”Όμ—°μ‚°μž μ—°μ‚°μž

Associativity(κ²°ν•© 법칙)

μ—°μ‚°μžμ—λŠ” μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ κ²°ν•©ν•˜μ—¬ 연산할지 μ•„λ‹ˆλ©΄ 였λ₯Έμͺ½μ—μ„œ μ™Όμͺ½μœΌλ‘œ κ²°ν•©ν•˜μ—¬ 연산할지 μ—°μ‚° λ°©ν–₯을 κ²°μ •ν•˜λŠ” κ²°ν•© 법칙이 μ‘΄μž¬ν•œλ‹€.
Operator Precedence

Precedence Associativity Individual operators
1: κ·Έλ£Ή n/a (x)
2: μ ‘κ·Όκ³Ό 호좜 쒌 β†’ 우 x.y Member access, x?.y Optional chaining
n/a x[y] Computed member access, new x(y) new with argument list, x(y) Function call
3: new n/a new xnew without argument list
4: ν›„μœ„ μ—°μ‚°μž n/a x++, x--
5: μ „μœ„ μ—°μ‚°μž n/a ++x, --x, !x 논리 NOT, ~x λΉ„νŠΈ NOT, +x 단항 +, -x 단항 -,
typeof x, void x, delete x, await x
6: κ±°λ“­μ œκ³± 우 β†’ 쒌 x ** y
7: κ³±μ…ˆ μ—°μ‚°μž 쒌 β†’ 우 x * y, x / y, x % y
8: λ§μ…ˆ μ—°μ‚°μž 쒌 β†’ 우 x + y, x - y
9: λΉ„νŠΈ shift 쒌 β†’ 우 x << y, x >> y, x >>> y λΆ€ν˜Έ μ—†λŠ” 였λ₯Έμͺ½ μ‹œν”„νŠΈ
10: 관계 μ—°μ‚°μž 쒌 β†’ 우 x < y, x <= y, x > y, x >= y, x in y, x instanceof y
11: ν•­λ“± μ—°μ‚°μž 쒌 β†’ 우 x == y, x != y, x === y, x !== y
12: λΉ„νŠΈ AND 쒌 β†’ 우 x & y
13: λΉ„νŠΈ XOR 쒌 β†’ 우 x ^ y
14: λΉ„νŠΈ OR 쒌 β†’ 우 x | y
15: 논리 AND 쒌 β†’ 우 x && y
16 쒌 β†’ 우 x || y 논리 OR, x ?? y
17: μ‚Όν•­ μ—°μ‚°μž 우 β†’ 쒌 x ? y : z
18: ν• λ‹Ήκ³Ό 기타 우 β†’ 쒌 x = y, x += y, x -= y, x **= y, x *= y, x /= y, x %= y,
x <<= y, x >>= y, x >>>= y, x &= y, x ^= y, x |= y,
x &&= y, x ||= y, x ??= y null 병합 μ—°μ‚°μž
우 β†’ 쒌 x => y Arrow function expressions
n/a yield x, yield* x, ...x Spread syntax
19: 콀마 쒌 β†’ 우 x, y Comma operator

πŸ“Œ Associativity
left-to-right(μ’Œκ²°ν•©μ„±) : 쒌 β†’ 우
right-to-left(μš°κ²°ν•©μ„±) : 우 β†’ 쒌



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

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

0개의 λŒ“κΈ€