==
: 느슨한 동치연산자. 왜 같은지 모르는 것들도 true
를 반환한다. 쓰지말자. 잊어라.[] == ![] // true
1 + 1 == '2' // true
===
: 엄격한 동치연산자. 타입과 값(또는 주소값) 등 완전히 같아야 true
를 반환한다. let
: 재선언 불가능. 재할당 가능. 여기서 재선언은 동일한 스코프 내에서만 불가능. 다른 스코프에서 재선언할 경우, 다른 변수로 취급.const
: 재선언 불가능. 재할당 불가능. 변수의 값을 일종의 상수로 만들어주기 때문에 실수로 값을 변경할 일이 없고, 코드의 가독성을 높여줌(값이 변하지 않는다는 걸 알면 해당 변수를 다루는 코드를 이해하기 쉬워짐).function add(a, b) {
return a + b;
}
함수 선언을 해당 스코프 최상단으로 끌어 올리는 것처럼 보이는 것을 호이스팅이라고 한다. 함수선언식은 호이스팅이 가능하다. 즉 함수를 호출한 뒤에 해당 함수를 선언하는게 가능하다는 뜻이다.
const add = function(x, y) {
return x + y;
};
함수표현식은 호이스팅이 불가능하다. let
이나 const
로 선언된 변수는 해당 블록 스코프 내에서만 사용이 가능하기 때문이다. 따라서 함수를 호출하기 전에 반드시 선언해야 한다.
function outer() {
const x = 10;
function inner() {
const y = 20;
console.log(x + y);
}
outer(); // undefined
위 코드를 보면, outer
에서는 inner
의 y
및 console.log(x + y)
를 출력하지 못하고 undefined
를 출력하게 된다. outer
의 언어적 환경에 따라, 내부에 있는 inner
로는 접근을 할 수 없기 때문이다.
function outer() {
const x = 10;
function inner() {
const y = 20;
console.log(x + y);
}
inner(); // outer함수 내부에서 inner함수 호출
}
outer(); // 30
하지만 outer
함수 내부에서 inner
함수를 호출하면, outer
함수는 inner
함수에 접근할 수 있게 되고, inner
함수가 선언된 최초의 언어적 환경에서 클로저를 찾기 때문에 inner
함수 내부에 있는 변수들에 접근할 수 있게된다.
function
키워드 대신 =>
연산자를 사용한 함수이다. 기존의 함수보다 간결하게 작성할 수 있다는 장점이 있다. 다른 함수식과는 다르게 자신의 this
를 가지지 않고 자신이 정의된 위치에서의 this
를 상속받는다.const double = x => x * 2;
...
연산자를 사용해 배열이나 객체를 펼쳐서 새로운 배열이나 객체를 만들 수 있다.const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const newArr = [...arr1, ...arr2];
console.log(newArr); // [1, 2, 3, 4, 5, 6]
...
연산자를 사용하여 rest parameter를 표현할 수 있다.function myFunction(a, b, ...rest) {
console.log(a);
console.log(b);
console.log(rest);
}
myFunction(1, 2, 3, 4, 5);
// 출력:
// 1
// 2
// [3, 4, 5]
위와 같이 나머지 매개변수를 하나의 배열로 반환한다.
rest parmeter는 항상 배열이기 때문에 위 코드에서 매개변수가 두개만 주어진다면 console.log(rest)
에서는 []
이 출력된다.
const arr = [1, 2, 3];
const [a, , b] = arr;
console.log(a); // 1
console.log(b); // 3
위와 같이 배열의 0, 2번째 인덱스에 해당하는 요소를 추출하여 a, b에 할당할 수 있다.
객체에도 적용할 수 있다
const obj = { a: 1, b: 2, c: 3 };
const { a: x, c: y } = obj;
console.log(x); // 1
console.log(y); // 3
이처럼 a와 c 프로퍼티를 추출하여 x, y에 할당하거나
const { a, b } = { a: 1, b: 2, c: 3 };
console.log(a); // 1
console.log(b); // 2
변수 이름을 생략하면, 프로퍼티 이름으로 자동으로 변수가 생성된다.