연산자

테루·2021년 4월 7일
0

표현식 과 연산자

표현식

표현식은 리터럴, 식별자, 연산자, 함수 호출 등의 조합을 말한다. 표현식은 평가되어 하나의 값을 만든다.

즉 표현식은 하나의 값으로 평가될 수 있는 문이다.

표현식은 리터럴 표현식, 연산자 표현식, 함수/ 메소드 호출 표현식 등으로 나누어 볼 수 있지만 결국 평가되어 하나의 값을 만드는 점에서는 모두 동일하다.

리터럴 이란?
값을 표기하는 약속된 기호, 문자, 방법이다. 프로그래밍이 기계어를 사용해 검포터와 커뮤니케이션이라는 방법이라는 점을 고려할 때, 리터럴은 커뮤니케이션의 방식을 특정하는 일종의 방법이다.

즉 사람이 이해할 수 있는 문자 또는 사전 정의된 기호(+, -, *, / 등등)를 가지고 값을 생성하는 방법이 리터럴이다.

1; // 정수 리터럴
'hello'; // 문자열 리터럴
[1,2,3]; //배열 리터럴
{age: 21}; //객체 리터럴
function() {} // 함수 리터럴

표현식은 평가되어 결국 하나의 값이 되며 표현식과 값은 동등한 관계이다.
즉 값이 위치할 수 있는 곳은 표현식도 위치할 수 있다는 것이다.
아래를 보면 + 좌항과 우항에는 숫자값이 위치해야한다. 하지만 숫자 값으로 평가될 수 있는 표현식(문자 등등)이라면 숫자 대신 사용할 수 있다.

var x = 10;
x + 10; // 식별자 표현식과, 연산자와 숫자 리터럴의 조합

이처럼 표현식은 다른 표현식의 일부가 되어 새로운 값을 만들어낼 수 있따. 연산자 표현식은 표현식을 결합해 새로운 값을 만들어 내는데 가장 일반적인 표현식이다.

문과 표현식

문은 자바스크립트 엔진에게 내리는 일종의 명령이다.
문에는 여러가지 종류가 있으며 그 종류에따라 선언시 행동이 달라지게 된다.
예를 들어 변수 선언문을 실행 시키면 변수가 선언이 되고, 할당문을 실행하면 할당이 되고, 조건문을 실하면 주어진 조건에 따라 코드 블록이 실행이 된다.

주의
문은 리터럴, 연산자, 표현식, 키워드 등으로 구성되며 세미콜론( ; )으로 끝내야한다.

차이점

표현식과 문은 유사하여 구별이 어려울 수 있다. 표현식은 평가되어 값을 만들지만 그 이상의 행위는 할 수 없다. 문은 var, let ,const , function ,class와 같은 선언 키워드를 사용하여 변수나 함수를생성하기도 하고 if, for, while문과 같은 제어문들 생성하여 프로그램의 흐름을 제어하기도 한다.

표현식의 역할

값을 생성하는 것

문의 역할은 표현식으로 생성한 값을 사용해 컴퓨터에게 명령을 내리는 것이다. 문에는 표현식인 문표현식이 아닌 문이 있다.

var x = 5 * 6; // 표현식 x = 5*6을 포함하는 선언문이다.

x = 100; // 이 자체가 표현식이지만 완전한 문이기도 하다. 

위 처럼 선언문은 표현식이 아닌 문이다. 다시 말해 값으로 평가될 수 없다. 따라서 선언문은 값처럼 사용할 수 없다.

연산자란?

하나 이상의 표현식을 대항으로 산술, 할당, 비교, 논리, 타입연산 등을 수행해 하나의 값을 만든다. 이때 연산의 대상을 피연산자라고 한다. 피연산자도 평가되어 하나의 값이 되므로 표현식이고 피연산자를 연산자와 결함한 연산자 표현식도 물론 표현식이다.

쉽게 쓰면 더하기 빼기 나누기 곱하기 = < > 등등 연산 하는 것

이항 산술 연산자

사칙연산인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 이다.

단항 산술 연산자.

단항 산술 연산자는 1개의 피연산자를 대상으로 연산한다.

증감과 감소 연산자는 위치에 따라 연산 순서가 다르다.
증감/감소 연산자가 피 연산자 앞에 있을경우(++var) 먼저 피연산자의 값을 증가/감소시킨후 다른 연산을 수행한다.
증감/감소 연산자가 피연산자 뒤에 있을경우 다른 연산을 수행한 후 피연산자의 값을 증가/감소시킨다.

문자열 연결 연산자

"+"연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결연산자로 동작한다. 그외의 경우에는 덧셈연산자로 동작한다.

이는 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되기도 한다는 것이다.

예를 들어 1+ true라는 연산을 했을때 자바스크립트는 true를 숫자타입인 1로 타입을 강제변환 후 연산을 수행한다.
이를 암묵적 타입 변환 또는 타입 강제 변환 이라고도 한다.

할당 연산자

할당 연산자는 우측에 있는 피연산자의 평가결과를 좌측의 변수에 할당한다.

= 할당연산자 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

비교연산자

비교연산자는 좌항과 우항의 피연산자를 비교하여 불리언(참, 거짓)값으로 반환한다.
주로 if문이나 for문 같은 제어문의 조건식에서 주로 사용한다.

동등 / 일치 비교연산자

동등비교연산자(==)는 좌우의 피연산자를 비교할때암묵적 타입변환을 통해 타입을 일치시킨 후 값이 같은지를 비교한다.
그렇기 때문에 동등비교연산자는 타입이 다르더라도 값이 같으면 true값을 반환한다.

일치비교연산자(===)는 좌항과 우항의 피연산자의 타입과 값이 같은 경우에 한하여 true값을 반환한다.

일치비교연산자는 비교적 확인하기 쉽지만 주의해야 할 점이 있다.
그것은 NaN이다.
Nan은 자신과 일치하지 않는 유일한 값이기에
NaN === NaN을 하면 false값이 나오게 된다.
숫자가 NaN인지 확인하려면 빌트인 함수인 isNaN을 사용해야한다.

삼항 조건 연산자

조건식의 평가 결과에 따라 반환할 값을 결정한다.
자바스크립트의 유일한 삼항 연산자이며 부수 효과는 없다.

조건식 ? 조건식이 true일때 반환하는값 : 조건식이 false일때 반환하는 값

물음표(?) 앞의 첫번째 피연산자가 조건식, 즉 불리언 타입의 값으로 평가될 표현식이다. 만약 조건식의 평가 결과가 불리언 값이 아니면 불리언 값으로 암묵적 타입 변환된다. 이때 조건식이 참이면 콜론(:) 앞의 두번째 피연산자가 평가되어 반환되고, 거짓이면 콜론(:) 뒤의 세번째 피연산자가 평가되어 반환된다.

논리 연산자

// 논리합(||) 연산자
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

typeof 연산자

typeof 연산자는 자신의 뒤에 있는 피연산자의 데이터 타입을 문자열로 반환한다.

typeof 연산자는 7가지 문자열 “string”, “number”, “boolean”, “undefined”, “symbol”, “object”, “function” 중 하나를 반환한다. “null”을 반환하는 경우는 없으며 함수의 경우 “function”을 반환한다.

profile
아직은 달걀안의

0개의 댓글