// 리터럴 표현식
10
// 식별자 표현식
sum
// 연산자 표현식
10 + 20
// 함수/메소드 호출 표현식
square()
var x = 10;
// 연산자 표현식
x + 30; // 식별자 표현식과 숫자 리터럴과 연산자의 조합
// 변수 선언문
var x;
// 할당문
x = 5;
// 함수 선언문
function foo() {}
// 조건문
if (x > 5) {...}
// 반복문
for (var i = 0; i < 10, i++) {...}
문은 리터럴, 연산자, 표현식, 키워드 등으로 구성되며 세미콜론(;)으로 끝나야함 (코드 블록 {...}은 제외)
문의 끝에 붙이는 세미콜론은 붙이지 않아도 됨
// 선언문 (Declaration statement)
var x = 5 * 10 // 표현식 x = 5 * 10을 포함하는 문
// 할당문 (Assignment statement)
x = 100; // 표현문이기도 하지만 완전한 문이기도 함
var foo = x = 100;
// 산술 연산자
5 * 4 // 20
// 문자열 연결 연산자
'My name is ' + 'Lee' // My name is Lee
// 할당 연산자
var color = "red" // red
// 비교 연산자
3 > 5 // false
// 논리 연산자
(5 > 3) && (2 < 4) // true
// 타입 연산자
typeof 'Hi' // "string"
| 이항 산술 연산자 | 의미 |
|---|---|
| + | 덧셈 |
| - | 뺄셈 |
| * | 곱셈 |
| / | 나눗셈 |
| % | 나머지 |
5 + 2 // 7
5 - 2 // 3
5 * 2 // 10
5 / 2 // 2.5
5 % 2 // 1
| 단항 산술 연산자 | 의미 |
|---|---|
| ++ | 증가 |
| -- | 감소 |
| + | 어떠한 효과도 없음 |
| - | 양수를 음수로 / 음수를 양수로 반전한 값을 반환 |
var x = 5; result;
// 후위 증가 연산자 -> 선대입 후증가
result = x++;
console.log(result, x); // 5 6
// 전위 증가 연산자 -> 선증가 후대입
result = ++x;
console.log(result, x); // 7 7
// 후위 감소 연산자 -> 선대입 후감소
result = x--;
console.log(result, x); // 7 6
// 전위 감소 연산자 -> 선감소 후대입
result = --x;
console.log(result, x); // 5 5
+10 // 10
+'10' // 10
+true // 1
+false // 0
-10 // -10
-'10' // -10
-true // -1
-false // 0
// 문자열 연결 연산자
'1' + '2' // '12'
'1' + 2 // '12'
// 산술 연산자
1 + 2 // 3
1 + true // 2 (true : 1)
1 + false // 0 (false : 0)
true + false // 1
1 + null // 1 (null : 0)
1 + undefined // NaN (undefined : NaN)
var x;
x = 10; // 10
x += 5; // 15
x -= 5; // 10
x *= 5; // 50
x /= 5; // 10
x %= 5; // 0
var str = 'My name is ';
str += 'Lee'; // My name is Lee
var x;
console.log(x=10); // 10
var x, y;
y = x = 10; // 연쇄 할당 (Chained assignment)
console.log(x, y); // 10 10
| 비교 연산자 | 의미 | 사례 | 설명 |
|---|---|---|---|
| == | 동등 비교 | x==y | x와 y의 값이 같음 |
| === | 일치 비교 | x===y | x와 y의 값과 타입이 같음 |
| != | 부등 비교 | x!=y | x와 y의 값이 다름 |
| !== | 불일치 비교 | x!==y | x와 y의 값과 타입이 다름 |
// 동등 비교
5 == 5 // true
// 타입이 다른 경우 암묵적 타입 변환을 거쳐 비교함
5 == '5' // true
5 == '8' // false
동등 비교 연산자는 수많은 부작용을 일으키므로 사용하지 않는 편이 좋음
동등 비교 연산자 대신 일치 비교 연산자를 사용할 것
일치 비교 (===) 연산자는 좌항과 우항의 피연산자가 타입과 값이 모두 같을 때 true를 반환함
// 일치 비교
5 === 5 // true
5 === '5' // false
NaN === NaN // false
0 === -0 // true
// 부동등 비교
5 != 8 // true
5 != 5 // false
5 != '5' // false
// 불일치 비교
5 !== 8 // true
5 !== 5 // false
5 !== '5' // true
| 대소 관계 비교 연산자 | 예제 | 설명 |
|---|---|---|
| > | x > y | x가 y보다 크다 |
| < | x < y | x가 y보다 작다 |
| >= | x >= y | x가 y보다 크거나 같다 |
| <= | x <= y | x가 y보다 작거나 같다 |
5 > 0 // true
5 > 5 // false
5 > 8 // false
5 < 0 // false
5 < 5 // false
5 < 8 // true
5 >= 0 // true
5 >= 5 // true
5 >= 8 // false
5 <= 0 // false
5 <= 5 // true
5 <= 8 // true
조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값
? 앞의 첫번째 피연산자
: 앞의 두번째 피연산자 : 조건식이 참일 때 평가되어 반환될 값
: 뒤의 세번째 피연산자 : 조건식이 거짓일 때 쳥가되어 반환될 값
var x = 2;
// x가 홀수일 때 '홀수', 짝수일 때 '짝수'를 출력
// 2 % 2는 0이고 0은 false로 암묵적 타입변환함
var result = x % 2 ? '홀수': '짝수';
console.log(result);
var x = 2; result;
if (x % 2) result = '홀수';
else result = '짝수';
console.log(result);
논리 연산자 (Logical Operator)
논리합 (||) 연산자와 논리곱 (&&) 연산자
// 논리합(||) 연산자
true || true // true
true || false // true
false || true // true
false || false // false
'Cat' || 'Dog' // 'Cat'
// 논리곱(&&) 연산자
true && true // true
true && false // false
false && true // false
false && false // false
'Cat' && 'Dog' // 'Dog'
!true; // false
!false; // true
!0 // true
var x, y, z;
x = 1; y = 2; z = 3; // 3
10 * 2 + 3 // 23
10 * (2 + 3) // 50
typeof '' // "string"
typeof 1 // "number"
typeof NaN // "number"
typeof true // "boolean"
typeof undefined // "undefined"
typeof Symbol() // "symbol"
typeof null // "object"
typeof [] // "object"
typeof {} // "object"
typeof new Date() // "object"
typeof /test/gi // "object"
typeof function() {} // "function"
var foo = null;
console.log(typeof foo === null); // false
console.log(foo === null); // true
typeof undeclared // "undefined"