러닝 자바스크립트 스터디 자료 - CHAPTER 5. 표현식과 연산자

이번 챕터에서는 표현식과 연산자에 대해 알아보는 챕터였다. 실습보다는 이론적인 부분들이 많았다.

표현식

값으로 평가될 수 있는 문 즉 결과가 값인 문과, 표현식이 아닌 문의 차이를 이해한다.
표현식이 아닌 문은 일종의 지시라고 생각 할 수있고, 표현식은 무언가를 요청하는 것이라고 생각 할 수 있다.

표현식은 값이 된다. 그 결과를 다른 표현식에 결합해서 다른 값을 얻을 수 있다. 그 값을 또 다른 표현식에 결합해서 또 다른 값을 얻는 식으로 이어질 수 있다. 표현식이 아닌 문은 이런 식의 결합을 할 수 있다.

표현식은 값이 되므로 할당에 쓸 수 있다. 즉 표현식의 결과를 변수나 상수, 프로퍼티에 할당할 수 있습니다.

연산자

표현식이 값이 되는 것이라면 연산자값을 만드는 행동이라는 뜻이다.
연산자는 하나 이상의 피연산자가 있어야 결과를 낼 수 있다. 피연산자를 매개변수라 부르는 경우도 있다.

산술 연산자

연산자 설명 예제
+ 덧셈(문자열 병합에도 쓰임) 3 + 2 5
- 뺄셈 3 - 2 1
/ 나눗셈 3/2 1.5
* 곱셈 3*2 6
% 나머지 3%2 1
- 단항 부정 -x x의 부호를 바꿉니다. x가 5이면 -x는 -5입니다.
+ 단항 플러스 +x x가 숫자가 아니면 숫자로 변환을 시도합니다.
++ 전위 증가 ++x x에 1을 더한 다음 평가합니다.
++ 후위 증가 x++ x를 평가한 다음 1을 더합니다.
전위 감소 –x x에서 1을 뺀 다름 평가합니다.
후위 감소 x– x의 값을 평가한 다음 1을 뺍니다.

뺄셈과 단항 부정은 같은 -기호를 사용
단항 부정이 먼저 이루어지고 그 다음에 뺄셈을 한다.
나머지 연산자는 나눗셈을 한 나머지를 반환

증가연산자(++),감소연산자(–)

할당 연산자와 덧셈연산자,뺄셈 연산자를 하나로 합친거나 다름없다.
전위와 후위의 차이의 이해가 필요하다.

전위 연산자는 먼저 변수의 값을 바꾼 다음에 평가, 후위 연산자는 값을 바꾸기 전에 평가한다.

연산자 우선 순위

현재 자바스크립트에는 56개의 연산자가 있고, 우선순위를 기준으로 19개의 그룹으로 묶을 수 있다.
우선순위가 같은 연산자들은 오른쪽에서 왼쪽으로 또는 왼쪽에서 오른쪽으로 평가한다.

비교연산자

비교연산자는 이름처럼 두 개의 값을 비교한다.
일치함(===), 동등함(==), 관계연산자 이렇게 세가지 타입으로 나뉜다.

두 값이 같은 개체를 가리키거나, 같은 타입이고 값(원시타입)도 같다면 이 값을 일치한다고 한다.
두 값이 같은 개체를 가리키거나, 같은 값을 갖도록 변환할 수 있다면 두 값을 동등하다고 한다.
관계연산자에는 작다(<), 작거나 같다(<=), 크다(>), 크거나 같다(>=) 네가지가 있다.

숫자비교

특별한 숫자형 값 NAN은 그 자신을 포함하여 무엇과도 같지 않다.
숫자가 NAN인지 알아보려면 내장된 isNAN 함수를 사용해야한다.
자바스크립트의 숫자는 모두 더블 형식이다.

문자열 병합

+연산자는 덧셈문자열 병합에 모두 사용
자바스크립트는 피연산자의 타입을 보고 덧셈을 할지 문자열 병합을 할지 판단
덧셈과 문자열병합은 모두 왼쪽에서 오른쪽으로 평가합니다.
평가후 피연산자 중 하나라도 문자열이면 문자열 병합을 수행
두 값이 모두 숫자형이면 덧셈을 수행

논리연산자

불리언 값만 다룰 수 있다. - true, false
참 같은 값과 거짓 같은 값 - truthy, falsy

  • 자바스크립트의 거짓 같은 값
    undefined
    null
    false
    0 NAN
    ‘’(빈문자열)

위의 6가지 외에는 모두 참 같은 값이다.

  • 참 같은 값 몇 가지 예시
    모든 객체, valueOf() 메서드를 호출했을때 false를 반환하는 객체
    배열,빈 배열 - 공백만 있는 문자열
    문자열 “false”

AND, OR, NOT

AND(&&) 연산의 진위표

x y x && y
false false false
false true false
true false flase
true true true

AND 연산은 피연산자가 모두 true일때만 true

OR(||) 연산의 진위표

x y x II y
false false false
false true true
true false true
true true true

OR 연산은 피연산자가 모두 false일때만 false

NOT(!) 연산의 진위표

x !x
false true
true false

NOT연산은 피연산자를 반대로 바꿈

단축평가

x && y 에서 x가 거짓 같은 값이면 y의 값을 평가할 필요없이 false이다.
x || y 에서 x가 참 같은 갑이면 y를 평가할 필요없이 true이다.
이러한 방식으로 동작하며 이를 단축평가 라고 한다.

단축평가가 중요한 이유는 두번째 피연산자에 부수효과가 있다 하더라고
단축평가를 거치면 그 효과는 일어나지 않기 때문이다.

피연산자가 불리언이 아닐때 논리 연산자가 동작하는 방법

불리언 피연산자를 사용하면 논리 연산자는 항상 불리언을 반환한다.
피연산자가 불리언이 아니라면 결과를 결정한 값이 반환된다.

불리언이 아닌 피연산자에 대한 AND(&&)의 진위표

x y x && y
거짓 같은 값 거짓 같은 값 x (거짓 같은 값)
거짓 같은 값 참 같은 값 x (거짓 같은 값)
참 같은 값 거짓 같은 값 y (거짓 같은 값)
참 같은 값 참 같은 값 y (참 같은 값)

불리언이 아닌 피연산자에 대한 AND(&&)의 진위표

x y x II y
거짓 같은 값 거짓 같은 값 y (거짓 같은 값)
거짓 같은 값 참 같은 값 y (참 같은 값)
참 같은 값 거짓 같은 값 x (참 같은 값)
참 같은 값 참 같은 값 x (참 같은 값)

결과를 불리언으로 변환하면 불리언 값을 제공했을 때의 진위표와 같은 결과가 된다.

조건연산자

자바스크립트의 유일한 3항 연산자
피연산자 세개를 받습니다.

1
조건식 ? 조건식이 ture일때 반환할 값 : 조건식이 false일때 반환할 값

쉼표연산자

쉼표연산자는 표현식을 결합하여 두 표현식을 평가하 후, 두 번째 표현식의 결과를 반환한다.
표현식을 하나 이상 실행해야 하지만 값으로 필요 것은 마지막 표현식의 결과 뿐일 때 쉼표 연산자를 유용하게 쓸 수 있다.

그룹연산자

그룹연산자()에는 아무 효과도 없지만 연산자 우선 순위를 높이거나 명확히 표현하는데 쓸 수 있다.
연산 순서만 바꿀 뿐 다른 부작용은 없다.

비트연산자

typeof연산자

typeof연산자는 피연산자의 타입을 나타내는 문자열을 반환한다.
자바스크립트의 일곱가지 데이터 타입을 정확히 나타내지 못한다. (null을 “object”로 판단)

void연산자

피연산자를 평가한 후 undefined를 반환한다.

할당연산자

변수에 값을 할당한다.
등호에 왼쪽에 잇는 것은 반드시 변수나 프로퍼티, 배열 요소 중 하나여야 한다.(상수에 값을 할당 하는 것은 엄밀히 말하면 선언이다.)
즉 표현식의 왼쪽에 있는 것은 반드시 값을 저장 할 수 있는 것이어야 한다.

간편할당연산자

연산과 할당을 한꺼번에 수행한다.

연산자 동등한 표현
x += y x = x + y
x -= y x = x - y
x *= y x = x * y
x /= y x = x / y
x %= y x = x % y
x <<= y x = x << y
x >>= y x = x >> y
x >>>= y x = x >>> y
x &= y x = x & y
x I= y x = x I y
x ^= y x = x ^ y

해체할당

ES6에 새로 도입
객체나 배열을 변수로 해체 할 수 있다.

해체할당
1
2
3
4
5
6
7
8
9
//객체선언
cosnt obj = { b:2, c:3, d:4 }

//해체할당
const {a,b,c} = obj;
a; //undefined : obj에는 "a" 프로퍼티가 없습니다.
b; // 2
c; // 3
d; // ReferenceError: "d"는 정의되지 않았습니다.
  • 객체를 해체할 때는 반드시 변수 이름과 객체의 프로퍼티 이름이 일치해야 한다. 프로퍼티 이름이 유효한 식별자인 프로퍼티만 해체 후 할당 된다.
  • 객체 해체는 할당만으로 이뤄질 수도 있지만 그렇게 하려면 반드시 괄호를 써야한다.
  • 배열을 해체할 때는 배열 요소에 대응할 변수 이름을 마음대로 쓸 수 있으며 이들은 배열 순서대로 대응한다.
  • 확산 연산자를 사용하면 남은 요소를 새 배열에 할당 할 수 있다. - 배열 해체는 꼭 배열에만 사용 할수 있는 것은 아니다, 이터러블 객체에는 모두 사용 할 수있다.

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×