JAVASCRIPT - 3. 표현식과 연산자

yeon·2022년 12월 1일

자바스크립트(ES6)

목록 보기
3/7


연산자

✔️ 표현식? 결과적으로 어떤 값으로 평가되는 것
즉, 값과 변수, 함수 등의 값을 바탕으로 식의 값을 계산하는 행위
ex) 숫자, 문자열, 논리값 등 원시값 / 변수, 프로퍼티, 배열요소, 함수호출, 메서드 호출

✔️ 연산자를 사용하면 표현식을 조합하여 더욱 복잡한 표현식을 만든다.
연산 대상이 되는 표현식을 피연산자

✔️ 연산자 우선순위는 그룹 연산자( )를 사용하면 ( ) 안에 들어 있는 표현식이 가장 먼저 평가된다.


산술 연산

산술 연산자는 피연산자가 숫자인 연산자이다.
피연산자가 숫자로 바꿀 수 없는 값이거나 계산할 수 없을 때는 NaN이 나온다.

1️⃣ 정수끼리 나누어도 결과가 부동소수점이 된다.
자바 혹은 다른 프로그래밍 언어에서는 정수/정수의 결과값은 정수지만
자바스크립트에서는 모두 부동소수점이 된다.

7 / 2 → 3.5

2️⃣ 나머지 연산자 %의 피연산자는 부동소수점이다.
모든 부동소수점 a와 b의 부동소수점을 구할 수 있다.
부동소수점으로 a % b를 계산할 수 있다.
결과값은 a에서 b의 배수를 뺀 절댓값이며 부호는 a와 같다.

15 % 4 → 3
5 % 1.5 → 0.5

3️⃣ + 연산자는 피연산자 중 하나가 문자열이면 나머지 피연산자를 문자열로 만든다.

  • 연산자는 피연산자가 숫자면 더하고 문자열이면 연결한다.
    피연산자 중 하나가 숫자, 하나가 문자열이면 숫자를 문자열로 타입을 바꾸고 문자열과 연결한다.

1 + "2month" → "12month"

4️⃣ 기타
계산을 할 수 없는 경우는 NaN으로 평가한다.
산술 연산자의 피연산자가 true면 1, false와 null이면 0으로 평가한다.
undefined 경우는 NaN

0 / 0 → NaN : 계산할 수 없음
"one" * 1 → NaN : 계산할 수 없음
true + true → 2 : 논리값의 타입을 숫자로 바꾸어 더함
1 + null → 1 : null을 0으로 바꾸어 더함
1 + undefined → NaN : undefined을 NaN으로 바꾸어 더함

산술 연산자 종류

산술 이항 연산자 (+, - , , /, %)
산술 단항 연산자 (++, --, +, -)
산술 대입 연산자 (+=, -=,
=, /=, %=)


문자열 제어하기

문자열 연결

✔️ + 연산자는 피연산자가 모두 문자열이면 문자열로 연결한다.

✔️ 피연산자 중 하나가 문자열 또는 문자열로 변환할 수 있는 객체라면 다른 피연산자의 타입을 문자열로 바꾼 다음 연결한다.
그렇지 않으면 피연산자 두 개를 숫자 또는 NaN으로 타입을 바꾸어 더한다.


"Hello " + "World!"	// "Hello World!"
"1" + "2" // "12"

10 + " little indians"	// 10 little indians
1 + {}	// "1 [object Object]"
true + (new Date())	// trueThu Dec 01 2022 01:08:17 GMT+0900 (한국 표준시)

var a = 5;
console.log("a 값은" + a + "입니다."); // a값은 5입니다. 

문자열 조작 메서드

✔️ 문자열을 String 객체로 변환하려면 String 생성자를 사용한다.

✔️ String 객체의 프로퍼티와 메서드는 문자열에서도 사용할 수 있다.
→ 문자열은 객체가 아니므로 프로퍼티를 가지고 있지 않지만 문자열에서 프로퍼티를 사용하려고 하면 문자열이 자동으로 String 객체로 변환되기 때문이다.

✔️ valueOf( ) 메서드를 사용해서 String 객체를 문자열로 다시 변환해야 한다.


var msgObj = new String("Everything is practice.");
console.log(msgObj.length); // 23, 문자열의 길이 구하기
console.log(msgObj.charAt(3)); // "r", 문자열의 n번째 문자 구하기 

var msg = "Everything is practice.";
console.log(msg.length);	// 23
console.log(msg.charAt(3));	// r

//----------------------------------

var c = msg.charAt(3);
// 위 코드가 다음과 같이 실행된다.
var msgObj = new String(msg);	// 문자열을 String 객체로 변환
var c = msgObj.charAt(3);		// String 객체의 메서드를 사용


var msg2 = new String("Hello Javascript").valueOf();
console.log(msg2);	//	Hello Javascript

문자열을 배열로 읽고 쓰기

문자열을 읽을 때는 charAt 메서드 대신 대괄호 연산자를 사용할 수 있다.
하지만 배열처럼 값을 대입해서 수정할 수 없다.


msg[3]	// "r"
msg[msg.length-1]	// "."

논리 연산자와 관계 연산자

관계 연산자

관계 연산자는 두 개의 피연산자를 비교한 결과를 논리값(true / false)으로 반환한다. 주로 제어문에서 조건식을 만들 때 사용한다.

연산자
==값이 같음
! =값이 다름
===값과 타입이 같음
! ==값과 타입이 다름
<작음
>
<=작거나 같음
>=크거나 같음

동일 연산자 (==)

좌변과 우변의 피연산지가 같은지 판별한다.

1️⃣ 좌우 피연산자의 타입이 같을 때
값이 같으면 true, 다르면 false로 판정한다.
변수의 데이터 타입에 따라 달라진다. (원시 타입 변수와 객체 타입 변수는 내용물이 다르다)


var a = [1,2,3];
var b = [1,2,3];
var c = a;
console.log(a == b);	// false
console.log(a == c);	// true

변수 a,b와 배열의 참조가 저장되어 있다. 각 배열에는 같은 데이터가 담겨 있지만 메모리에서 차지하는 위치가 다르다.

2️⃣ 좌우 피연산자의 타입이 다를 때
규칙에 따라 동일한지 판별한다.

  • undefined와 null은 같은 것으로 친다.

  • 한쪽이 숫자고 다른 한쪽이 문자열이면 문자열을 숫자로 변환해서 비교한다.

  • 둘 중에 한쪽이 논리값이면 true는 1, false는 0으로 변환해서 비교한다.

  • 한쪽이 객체고 다른 한쪽이 숫자 또는 문자열이면 객체를 toString이나 valueOf 메서드를 사용해서 원시 타입으로 변환한 다음에 비교한다.

  • 위에 규칙에서 벗어나면 모두 '같지 않음'으로 판정한다.


// 전부 true 반환	
null == undefined	
1 == "1"
true == 1
true == "1"
(new String("a")) == "a"
(new Number(2)) == 2
[2] == 2

일치 연산자 (===)

피연산자를 평가 후에 타입을 변환하지 않은 상태의 두 값을 엄격하게 비교한다.
타입과 값이 모두 같으면 같다 판정하고 그렇지 않으면 같지 않다고 판정한다.
NaN은 NaN을 포함한 모든 값과 같지 않다고 판정한다.


// 전부 false 반환	
NaN === NaN 
null === undefined	
1 === "1"
true === 1
true === "1"
(new String("a")) === "a"
(new Number(2)) === 2
[2] === 2

논리 연산자

연산자
&&피연산자 2개 모두 true이면 true, 그 외 false
||피연산자 중 하나라도 true면 true, 모두 false면 false
!피연산자가 true면 false, false면 true

x > 0 && y > 0	// x와 y가 모두 참일 때만 true 
x > 0 || y > 0	// x와 y 중 하나라도 참이면 true, 모두 0 이하면 false
! (a && b)	// a 또는 b가 거짓

피연산자의 평가

피연산자평가되는 값
0, -0, 빈 문자열(""), NaN, null, undefinedfalse
0을 제외한 숫자, 빈 문자열을 제외한 문자열, 모든 객체, 심벌true

기타 연산

typeof 연산자

피연산자의 데이터 타입을 뜻하는 문자열을 반환한다.

✔️ typeof 연산자는 함수 이외의 객체에 대해 모두 "object"를 반환하므로 객체 유형은 파악할 수 없다. 객체 유형을 조사할 때는 instanceof 연산자와 객체의 constructor 프로퍼티를 사용한다.


var s = "ABC";
console.log(typeof s);	// string

조건 연산자 (삼항 연산자)

조건(?:) 연산자는 주어진 조건의 참과 거짓에 따라 값을 선택한다.


var parity = (a % 2 == 0) ? "짝수" : "홀수";

// if/else문 사용
if(a % 2 == 0){
  parity = "짝수";
} else{
  parity = "홀수";
}  

profile
다재다능한 코린이가 될거야 ! 🧚‍♀️

0개의 댓글