const, let은 {블록 스코프}를 가지므로 블록 밖에서는 변수에 접근 불가
var은 함수 스코프를 가지므로 블록과 관계없이 접근 가능
// hoisting -> 변수의 정의가 그 범위에 따라 선언과 할당으로 분리되는 것
const : 한번 값을 할당하면 다른 값을 할당 불가(상수)
자바스크립트에서는 한 번 초기화했던 변수에 다른 값을 할당하는 경우가 적기 때문에 기본적으로 const를 사용하고 다른 값을 할당해야 하는 상황이 생겼을 때 let을 사용
{name: name, age: age} //ES5
{name, age} //ES20153. 프로미스
const condition = ture;
const promise = new Promise((resolve, reject) => {
if (condition) {
resolve('성공');
} else {
reject('실패');
}
});
promise
.then((message) => {
console.log(message);
})
.then((error) => {
console.error(error);
})
.finally(() => {
console.log('무조건');
});
프로미스의 세가지 상태
- Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
- Fulfilled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태
- Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태
- Promise chaining : 여러개의 프로미스를 연결해서 사용
async func() => {
try{
console.log('다 찾았니');
const user = await Users.findOne('zero');
const updateduser = await Users.update('zero', 'nero');
const removedUser = await Users.remove('nero');
} catch(err) {
console.error(err);
}
}
func()
num1 + '더하기' + num2 + '는\'';//가독성도 떨어지고 escape 문 때문에 지저분함
`${num3} 더하기 ${num4}는 '${result}'`;//${변수}형식으로 기호없이 문자열에 넣을 수 있음
var funcName = (params) => {
}//함수 표현식 생성 - 화살표함수
//객체
var candyMachine = {
status: {
name: 'node',
count: 5,
},
getCandy: function () {
this.status.count--;
return this.status.count;
},
};
var getCandy = candyMachine.getCandy;
var count = candyMachine.status.count;
//객체 - 구조분해 할당
const candyMachine = {
status: {
name: 'node',
count: 5,
},
getCandy() {
this.status.count--;
return this.status.count;
},
};
const { getCandy, status: { count } } = candyMachine;
//array
var array = ['nodejs', {}, 10, true];
var node = array[0];
var obj = array[1];
var bool = array[3];
//array - 구조분해 할당
const array = ['nodejs', {}, 10, true];
const [node, obj, , bool] = array;
var Human = function(type) {
this.type = type || 'human';
};
Human.isHuman = function(human) {
return human instanceof Human;
}
Human.prototype.breathe = function() {
alert('h-a-a-a-m');
};
var Zero = function(type, firstName, lastName) {
Human.apply(this, arguments);
this.firstName = firstName;
this.lastName = lastName;
};
Zero.prototype = Object.create(Human.prototype);
Zero.prototype.constructor = Zero; // 상속하는 부분
Zero.prototype.sayName = function() {
alert(this.firstName + ' ' + this.lastName);
};
var oldZero = new Zero('human', 'Zero', 'Cho');
Human.isHuman(oldZero); // true
class Human {
constructor(type = 'human') {
this.type = type;
}
static isHuman(human) {
return human instanceof Human;
}
breathe() {
alert('h-a-a-a-m');
}
}
class Zero extends Human {
constructor(type, firstName, lastName) {
super(type);
this.firstName = firstName;
this.lastName = lastName;
}
sayName() {
super.breathe();
alert(`${this.firstName} ${this.lastName}`);
}
}
const newZero = new Zero('human', 'Zero', 'Cho');
Human.isHuman(newZero); // true
Node.js 교과서 - 조현영