nodejs

이장훈·2022년 2월 11일

1. let, const

let, const는 ES2015(ES6)에 추가된 변수 선언 키워드.
hoisting 규칙이 없고, block scoping을 지원합니다.
var 보다 훨씬 예측 가능하게 해줍니다.

let으로 선언된 변수는 레퍼런스가 바뀔 수 있고, const는 바뀔 수 없다.
let x = 1
x = 2 // x = 2로 ok!

const x = 1
x = 2 // x = 1로 uncaught TypeError; Assignment to constant variable

let taste = 'hot'
let food = 'chicken'
const dish = '${taste} ${food}' // 'hot chicken'

var x = 1
var x = 2 // ok!

let x = 1
let x = 2 // uncaught SyntaxError: Identifier 'x' has already been declared

2) var와는 달리 let과 const는 변수를 정의하기 전에는 사용할 수 없음.
var는 호이스팅 규칙을 따름. 변수 선언 전에도 먼저 사용 가능.
console.log(x) // undefined
var x = 0

console.log(x) // referenceError; Cannot access 'x' before initialization
const x = 0

3) let과 const 모두 같은 scoping rule을 따릅니다. (block scoping)
-> block 안에서 같은 것으로 만 취급한다.

var x = 1
{
var x = 2
console.log(x) // 2
}
console.log(x) // 2

const x = 1
{
const x = 2
console.log(x) // 2
}
console.log(x) // 1

결론 - let, const vs var

  • let과 const의 예측 가능성유지보수성이 var보다 훨씬 뛰어납니다.
  • 가능하다면 const만 쓰고, 필요한 경우에 한해 let을 쓰고(레퍼런스가 바뀌어야하는 closer 증에서만 사용), var는 절대 쓰지 않는다.

2. spread syntax (...)

  • ES2015에 새로 추가된 syntax
  • 병합, 구조 분배 할당(destructuring) 등에 다양하게 활용할 수 있다.

2.1 object merge (1)

  • 각각의 2 object를 하나의 user로 합칠 수 있다.

const personalData = {
nickname: 'JH',
email: 'jh12@gmail.com',
}
const publicData = {
age: 22,
}

const user = {
...personalData,
...publicData,
}

2.2 object merge (2)

const overrides = {
DATABASE_HOST: 'myhost.com',
DATABASE_PASSWORD: 'mypassword',
}

const config = {
DATABASE_HOST: 'default.hostcom', // myhost.com이 됨
DATABASE_PASSWORD: '****' // mypassword가 됨
DATABASE_USERNAME: 'myuser',
...overrides, // 결국 나중에 온 내용을 override 함.
}

2.3 object rest

const user = {
nickname: 'JH',
age: 22,
email: 'jh12@example.com',
}

const { nickname, ...personalData } = user // 닉네임만 사용
console.log(personalData) // ( age:22, email: 'jh12@example.com' )

2.4 array merge

const pets = ['dog', 'cat']
const predators = ['wolf', 'cougar']
const animals = [...pets, ...predators]
console.log(animals) // ['dog', 'cat', 'wolf', 'cougar']

2.5 array rest

const [head, ...reast] = [1, 2, 3]
console.log(head) // 1
console.log(rest) // (2, 3)

2.6 shouldOverride를 통한 조건 판별

const shouldOverride = true/false

const user = {
...{
email: 'abd@def.com',
password: '****',
},
...{
nickname: 'foo',
},
...(shouldOverride
? {
email: 'fff@fff.com',
}
: null),
}

console.log(user) * true = fff / false = abc

profile
개발자가 꿈입니다.

0개의 댓글