무명의 리터럴(값)로 표현 가능
변수나 자료구조(객체, 배열)에 저장 가능
var increase = function (num) { return ++num; }
함수의 매개변수로 전달 가능
반환값으로 사용 가능
function makeCounter(increase) {
return function() {
num = increase(num);
return num;
};
}
var
let
const
키워드로 선언undefined
로 초기화ReferenceError
var | let | const | |
---|---|---|---|
범위 | function scope | block scope | block scope |
변수 재선언 | O | X | X |
변수값 재할당 | O | O | X |
초기화 필요 | X | X | O |
var
의 문제점함수 레벨 스코프 → 전역 변수의 남발
var 키워드 생략 허용 → 의도치 않은 변수의 전역화
중복 선언 허용 → side effect 발생
변수 호이스팅 → 변수 선언 전에 참조 가능
→ 단점 보완하고자 ES6 때 let
const
추가
상위 스코프 방향으로 이동하면서 선언된 변수 검색
let
const
호이스팅 발생 → TDZ에 의해 변수 접근 불가console.log(cake); // undefined
var cake;
console.log(lemon); // Error: Uncaught ReferenceError: lemon is not defined
let lemon;
boolean
""
null
undefined
0
NaN
number
string
undefined
null
symbol
var mySymbol = Symbol('Symbol에 대한 설명');
var obj = {};
obj[mySymbol] = 123;
Object.freeze
를 통해 프로퍼티 변경 방지 (객체의 방어적 복사)배열
함수
정규표현식
)10
sum
10 + 20
square()
이항 산술 연산자
+
-
*
/
%
**
1 + null // 1 (null -> 0)
1 + undefined // NaN (undefined -> NaN)
단항 산술 연산자
++
--
문자열 연결 연산자
+
연산자의 피연산자 중 하나 이상이 문자열인 경우'1' + 2 // '12'
=
+=
-=
*=
/=
%=
동등/ 일치 비교 연산자
== | 동등 | 값이 같음 |
---|---|---|
! = | 부등 | 값이 다름 |
=== | 일치 | 값과 타입이 같음 |
! == | 불일치 | 값과 타입이 다름 |
12 == '12' // true
12 === '12' // false
대소 관계 비교 연산자
>
>=
<
<=
+
문자열 타입으로 변환-
*
/
숫자 타입으로 변환1 - '1' // 0
1 / 'one' // NaN
+'' // 0
+true // 1
조건문
불리언 타입으로 변환조건식 ? true 일 때 : false 일 때
||
&&
!
&&
falsy 만나면 평가 멈춤||
truthy 만나면 평가 멈춤x = 1, y = 2, z = 3; // 3
()
9 * 2 + 1 // 19
9 * (2 + 1) // 27
string
number
boolean
undefined
symbol
object
function
bigInt
중 하나 반환null
은 반환 Xconst flower = null;
console.log(typeof flower === null); // object (언어의 오류)
console.log(flower === null); // true
String(number || boolean)
(number || boolean).toString()
"" + (number || boolean)
${ number 변수명 || boolean 변수명 }
Number(string || boolean)
parseInt(정수형 string)
parseFloat(실수형 string)
+(string || boolean)
(string || boolean) * 1
Boolean(숫자 || 문자열 || 객체 || undefined || null)
!! (숫자 || 문자열 || 객체 || undefined || null )
;
추가 Xif … else 문
삼항 조건 연산자
if ...else
문switch 문
switch (month) {
case 3: case 4: case 5: // 이렇게 중복해서 사용할 수도 있네
season = "spring";
break;
case 6: case 7: case 8:
season = "summer";
break;
case 9: case 10: case 11:
season = "autumn";
break;
case 12: case 1: case 2:
season = "winter";
break;
default:
season = "unknown";
}
함수 선언문
function 함수명(매개변수) {
return 반환값;
}
함수 표현식
const 변수명 = function (매개변수) {
return 반환값;
}
화살표 함수
const 변수명 = (매개변수) => {
return 반환값;
}
function
키워드로 생성한 일반 함수this
= 전역 객체 window
that
변수 사용getCount: function() {
let self = this;
setTimeout(function () {
console.log(self.count);
}, 1000);
}
bind()
사용getCount: function() {
setTimeout(function () {
console.log(this.count);
}.bind(this), 1000);
}
this
에 바인딩할 객체 정적으로 결정bind()
메소드 사용 X객체 생성자 문법
const user = new Object();
객체 리터럴 문법
const user = {};
const jnaryKey = "SOPT34기 WEB Fighting!"
const user = {
age: 24,
[jnaryKey]: true
}
user.age
user['age']
user.name = "jnary"
delete user.age
function makeUser(name, age) {
return {
name: name,
age: age
};
}
//동일
function makeUser(name, age) {
return {
name,
age
};
}
in
연산자
for ... in
for (let key in object) { ... }
const obj = { a: 1 };
const copy = Object.assign({}, obj);
// { a: 1 }
Object.freeze(user1);
user1.name = 'Kim'; // 무시
Object.isFrozen(user1); // true
object
타입, 여러 개의 값 순차적 저장배열 리터럴
const arr = [1, 2, 3, 4]
Array() 생성자 함수
const arr = newArray(2);
// (2) [empty x 2]
const arr = newArray(1, 2, 3);
// [1, 2, 3]
pop
: 배열 끝 요소 제거, 제거한 요소 반환push
: 배열 끝 요소 추가shift
: 배열 앞 요소 제거, 제거한 요소 반환unshift
: 배열 앞 요소 추가reverse
: 배열 순서 반전includes
: 배열 항목에 특정 값 포함되어있는지 여부splice
: 요소 추가, 삭제, 교체arr.aplice(index, deleteCount, elem1, ..., elemN])
index : 조작을 가할 첫 번째 요소
deleteCount : 제거하고자 하는 요소 개수
elem1, …, elemN : 배열에 추가할 요소
const color = ["빨", "주", "분", "파", "남", "보"]
color.splice(2, 1, "노", "초");
// ["빨", "주", "노", "초", "파", "남", "보"]
→ 원본 배열 변경
slice
: [start, end) 의 요소를 복사한 새로운 배열 반환const subColor = color.slice(0, 3)
// ["빨", "주", "노"]
for 문
for … of
forEach
arr.forEach((element, index, array) => {...})
map
filter
const { age, name: {first, second} } = user
const { age, ...rest } = user
배열이나 객체를 펼칠 수 있다.
const name = {
name: 'jnary'
};
const nameAge = {
...name,
age: 24
}