
✔️ 표현식? 결과적으로 어떤 값으로 평가되는 것
즉, 값과 변수, 함수 등의 값을 바탕으로 식의 값을 계산하는 행위
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, undefined | false |
| 0을 제외한 숫자, 빈 문자열을 제외한 문자열, 모든 객체, 심벌 | true |
피연산자의 데이터 타입을 뜻하는 문자열을 반환한다.
✔️ 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 = "홀수";
}