
무명의 리터럴(값)로 표현 가능
변수나 자료구조(객체, 배열)에 저장 가능
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 NaNnumber
string
undefined
null
symbol
var mySymbol = Symbol('Symbol에 대한 설명');
var obj = {};
obj[mySymbol] = 123;
Object.freeze 를 통해 프로퍼티 변경 방지 (객체의 방어적 복사)배열 함수 정규표현식)10sum10 + 20square()이항 산술 연산자
+ - * / % **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); // trueString(number || boolean)(number || boolean).toString()"" + (number || boolean)${ number 변수명 || boolean 변수명 }Number(string || boolean)parseInt(정수형 string) parseFloat(실수형 string)+(string || boolean)(string || boolean) * 1Boolean(숫자 || 문자열 || 객체 || 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 = 전역 객체 windowthat 변수 사용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.ageuser['age']user.name = "jnary"delete user.agefunction 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); // trueobject 타입, 여러 개의 값 순차적 저장배열 리터럴
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} } = userconst { age, ...rest } = user배열이나 객체를 펼칠 수 있다.
const name = {
name: 'jnary'
};
const nameAge = {
...name,
age: 24
}