let isConfirm = true;
function confirm(onYes, onNo) {
if (isConfirm) onYes();
else onNo();
}
confirm(
() => console.log('yes'),
() => console.log('no')
);
// yes
confirm의 첫 번째 인수로 'yes'를 출력하는 화살표 함수를 전달한다. 이 함수는 매개변수 onYes에 저장된다.
함수가 조건문이나 반복문 또는 다른 함수 내부에서 선언되면 지역 스코프를 갖는다. (함수표현식이거나 화살표 함수일 때) 그게 아니면 hoisting으로 루프 밖에서 호출 가능하다. → ES6부터 let, const는 블록 스코프를 더 철저히 따르도록 설계해서 이렇게 된 것 같다.
let person = {
name : "chan",
age: 25,
"like cat": TextTrackCue
};
const personName = person.name; // 점 표기법
const personAge = person["age"]; // 괄호 표기법
console.log("name : " + personName + " & age is " + personAge);
person.gender = "male";
person["nickname"] = "hacker";
console.log(person["gender"]);
console.log(person.nickname);
function addProperty(obj, key, value) {
obj[key] = value;
}
let obj = {}; // 빈 객체를 선언할 때, 사용하는 리터럴 선언법
// let obj = new Object(); - 객체 생성자 선언법
addProperty(obj, "a", 1);
addProperty(obj, "b", 2);
console.log(obj);
상수로 선언한 객체는 프로퍼티를 추가하거나 수정할 수 없나?
→ 객체 내부의 프로퍼티는 자유롭게 수정 및 삭제 가능
method : 객체에서 값이 함수인 프로퍼티 → method는 데이터가 아니라 객체의 동작을 의미한다.
배열을 선언할 때는 배열 생성자보다 배열 리터럴을 주로 사용한다. (문법이 간결하기 때문에)
let arrA = []; , let arrB = ['chicken', 'ramen'];
배열은 값으로 어떤 자료형이든지 사용 가능하다. 다른 배열, 객체, 함수 모두 가능하다.
단락 평가
&&, || 를 사용할 때, 참이나 거짓이 왼쪽에 위치한 첫 번째 피연산자 값으로 이미 결정이 나게 되면 단락 평가가 이루어지게 되므로 그 다음 피연산자부터는 계산하지 않는다.
객체의 속성이 있는 지 알고 코드를 진행하다가 undefined나 null로 인해서 예상치 못한 결과가 나올 수 있다. 이때마다 조건문으로 person.name !== undefined && person.name !== null를 작성하는 건 비효율적이다. 이럴 때 단락평가를 사용하면 쉽게 작성할 수 있다.
function getName(person) {
return person && person.name;
}
let person = { name: "chan" };
let name1 = getName(undefined);
let name2 = getName(null);
let name3 = getName(person);
console.log(name1, name2, name3);
null 병합 연산자 (?? ) : 둘 중 null이나 undefined가 아닌 값이 있으면 그 값을 출력하고, 둘 다 null이나 undefined가 아니라면 왼쪽 피연산자를 출력한다.
함수 또한 객체이고, 함수는 값으로 취급된다. 이 특징으로 함수를 값으로 저장하는 함수 표현식이 가능하고, 다른 함수에 인수로 전달할 수 있다.
JS에서는 객체 자료형의 값 크기가 유동적으로 변하기 때문에 일정한 크기의 공간을 할당해주는 게 아닌 값을 저장하는 곳의 주소만 저장하는 방식을 이용한다.(Reference)
for .. of 반복문 ← 배열을 순회할 때
let arr = [1,2,3,4];
for(let item of arr) {
console.log(item);
}
Object.keys(person); : 객체 프로퍼티의 key를 배열로 반환
이때 문자열로 반환된다는 점을 유의!
for .. in 반복문 ← 객체를 순회할 때
for (let key in person) {
const value = person[key];
console.log(key, value);
}