nodejs

이장훈·2022년 2월 11일
0

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개의 댓글