JavaScript 최신 문법 정리

ES6 ~ ES13 version 정리 입니다.

 

자바스크립트의 혁명이라 할 수 있는 ES6 이후 추가된 자바스크립트 최신 문법 중 자주 이용할 기능들을 정리하였습니다.

 

Numeric Separators

 

10000000000 과 같은 단위가 큰 숫자의 가독성을 높일 수 있게 언더바 ( _ ) 로 단위를 구분할 수 있는 표현입니다.

구분자는 임의의 위치에 마음대로 추가가 가능합니다.

 

console.log(1_000_000_000 + 10_000) // 1000010000

 

Shorthand Property names

 

프로퍼티 이름과 value 값의 변수이름과 동일할 때에는 하나로 생략이 가능합니다.

 

const ellie1 = {
  name: 'Ellie',
  age: '18',
};
const name = 'Ellie';
const age = '18';


// ❌ ( 비효율 )
const ellie2 = {
  name: name,
  age: age,
};

// ⭕
const ellie3 = {
  name,
  age,
};

 

Destructuring Assignment

 

구조분해 문법으로, 객체, 배열안의 원소값들을 바깥 변수로 한번에 빼서 사용하기 위한 문법 입니다.

 

// object
const student = {
  name: 'Anna',
  level: 1,
};


// ❌

const name = student.name;
const level = student.level;
console.log(name, level); // Anna 1

// ⭕
const { name, level } = student;
console.log(name, level); // Anna 1

const { name: studentName, level: studentLevel } = student;
console.log(studentName, studentLevel); // Anna 1




// array
const animals = ['🐶', '😽'];


// ❌
const first = animals[0];
const second = animals[1];
console.log(first, second); // 🐶 😽

// ⭕
const [first, second] = animals;
console.log(first, second); // 🐶 😽

 

Spread Syntax

 

전개 연산자로, 객체나 배열 안의 요소들을 펼쳐 복사하는 것을 말합니다.

주의할 점은 얕은 복사가 이루어 집니다.

 

const obj1 = { key: 'key1' };
const obj2 = { key: 'key2' };
const array = [obj1, obj2];

// array copy
const arrayCopy = [...array];
console.log(arrayCopy); // [ { key: 'key1' }, { key: 'key2' } ] 

const arrayCopy2 = [...array, { key: 'key3' }];
obj1.key = 'newKey'; 

console.log(array); // [ { key: 'newKey' }, { key: 'key2' } ]
console.log(arrayCopy2); // [ { key: 'newKey' }, { key: 'key2' }, { key: 'key3' } ]

// object copy
const obj3 = { ...obj1 };
console.log(obj3); // { key: 'newKey' }

// array concatenation
const fruits1 = ['🍑', '🍓'];
const fruits2 = ['🍌', '🥝'];
const fruits = [...fruits1, ...fruits2];
console.log(fruits); // [ '🍑', '🍓', '🍌', '🥝' ]

// object merge
const dog1 = { dog: '🐕' };
const dog2 = { dog: '🐶' };
const dog = { ...dog1, ...dog2 };
console.log(dog); // { dog: '🐶' }

 

Short Circuit

 

and 연산자 or 연산자 특성을 이용해 반환값을 결정하는 기법 입니다.

 

|| 연산자

왼쪽 값이 true 하면 왼쪽 값을 return 하고, 왼쪽 값이 false 하면 오른쪽 값을 return 합니다.

 

const seaFood = {
  name: "박달대게"
};

function getName(fish) {
  /*if(!fish) {
    return '이름없음'
  }
  return fish;*/
  return fish || '이름없음' // 만약 fish가 null이라면 대신 or '이름없음'을 리턴
}

const name = getName(seaFood)
console.log(name) // {name : 박달대게}

const name2 = getName()
console.log(name2) // '이름없음'



console.log(false || 'hello') // 'hello'
console.log('' || 'hello') // 'hello'

console.log('트루' || 'hello') // '트루'
console.log(1 || 'hello') // 1

console.log('hello1' || false) // 'hello1'
console.log('hello2' || NaN) // 'hello2'

console.log(null && false) // false
console.log(undefined || null) // null

 

&& 연산자

왼쪽 값이 true 이면 오른쪽 값을 return 합니다. 만일 오른쪽 값이 없으면 undefined , null 입니다.

왼쪽 값이 false 이면 왼쪽 값을 return 합니다.

 

console.log(true && "hello"); // 'hello'
console.log(null && undefined); // null
console.log(undefined && "hello"); // undefined
console.log("hello" && null); // null
console.log("hello" && "bye"); // bye
console.log(null && "hello"); // null
console.log(undefined && "hello"); // undefined

 

Nullish Coalescing Operator

?? 라는 문법 으로써, 거짓의 판단을 유연하게 판단하는 문법 입니다. 간단하게 값이 있고 없고로 판단합니다.

 

var named = 'Ellie';
var userName = named || 'Guest';
console.log(userName); // Ellie

var named = null;
var userName = named || 'Guest';
console.log(userName); // Guest


// ❌
var named = '';
var userName = named || 'Guest'; // 논리값은 빈값도 false로 판단
console.log(userName); // Guest

var num = 0;
var message = num || 'Hello'; // 논리값은 0은 false로 판단
console.log(message); // Hello

// ⭕
var named = '';
var userName = named ?? 'Guest'; // 그냥 심플하게 값이 있고 없고로 판단. 빈칸도 결국 값이 빈칸인 것이다.
console.log(userName); // ''

var num = 0;
var message = num ?? 'Hello'; // 0도 결국 값이 0인것
console.log(message); // 0

 

문자열 최신 문법

replaceAll()

일치하는 모든 문자열을 replace 해줍니다.

즉 첫번째 인자로 바꿔야 하는 문자열을 넣어주고 두번 째 인자로 바꾸고 싶은 문자열을 넣어주면 됩니다.

 

// ❌
console.log("문자열에서 여러번 나오는 문자열을 한꺼번에 변경할 수 있습니다.".replace(/문자열/g,""));
// 에서 여러번 나오는 을 한꺼번에 변경할 수 있습니다.

// ⭕
console.log("문자열에서 여러번 나오는 문자열을 한꺼번에 변경할 수 있습니다.".replaceAll("문자열",""));
// 에서 여러번 나오는 을 한꺼번에 변경할 수 있습니다.

 

padStart()

문자열 끝 부분이나 시작 부분을 다른 문자열로 채워 주어진 길이를 만족하는 새로운 문자열을 만들어낼 수 있습니다.

 

"hello".padStart(6); // " hello"
"hello".padEnd(6); // "hello "
"hello".padStart(3); // "hello" // 문자열 길이보다 목표 문자열 길이가 짧다면 채워넣지 않고 그대로 반환
"hello".padEnd(20, "*"); // "hello***************" // 사용자가 지정한 값으로 채우는 것도 가능

 

trimStart() , trimEnd()

빈공간을 제거하는 trim 을 좀 더 세부화 시켜 줍니다.

 

// trimStart()
'Testing'.trimStart() //'Testing'
' Testing'.trimStart() //'Testing'
' Testing '.trimStart() //'Testing '
'Testing '.trimStart() //'Testing '

// trimEnd()
'Testing'.trimEnd() //'Testing'
' Testing'.trimEnd() //' Testing'
' Testing '.trimEnd() //' Testing'
'Testing '.trimEnd() //'Testing'

 

배열 최신 문법

flat()

중첩 배열을 삭제하거나 배열의 빈 공간을 삭제시켜 주는 문법 입니다.

 

// 중첩 다차원 배열 평평하게
const array = [1, [2, 3], [4, 5]];
array.flat(1); // 결과 : [1,2,3,4,5]

// 데이터 정리도 됨
const entries = ["bob", "sally", , , , , , , , "cindy"];
entries.flat(); // 결과 ['bob', 'sally', 'cindy'];

at()

배열안에 양수, 음수 index 를 사용하여 편하게 접근할 수 있게 만들어 주는 문법 입니다.

 

const arrays = ['a','b','c','d'];
console.log(arrays.at(-1)); // 'd

 

객체 최신 문법

Optional chaining

?. 으로 쓸 수 있는 문법으로, 프로퍼티가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있습니다.

?. 앞의 평가 대상이 undefined , null 이면 평가를 멈추고 undefined 를 반환합니다.
data?.name 일 때 data 값이 없다면 undefined 를 반환해 줍니다.

 

const person1 = {
  name: 'Ellie',
  job: {
    title: 'S/W Engineer',
    manager: {
      name: 'Bob',
    },
  },
};

const person2 = {
  name: 'Bob',
};


// ❌
function printManager(person) { // 중첩 객체의 값을 불러오는 함수
  console.log(person.job.manager.name);
}
printManager(person1); // Bob
printManager(person2); // 에러


// ❌
function printManager(person) {
  console.log(person.job && person.job.manager && person.job.manager.name);
}
printManager(person1); // Bob
printManager(person2); // undefined


// ⭕
function printManager(person) {
  console.log(person?.job?.manager?.name);
}
printManager(person1); // Bob
printManager(person2); // undefined

 

함수도 마찬가지 입니다.

 

let user1 = {
  admin() {
    alert("관리자 계정입니다.");
  }
}

let user2 = {};

user1.admin?.(); // 관리자 계정입니다.
user2.admin?.(); // undefined

 

 

'JavaScript' 카테고리의 다른 글

jQuery  (0) 2024.11.27
FormData 객체  (5) 2024.11.27
Chrome 으로 기초 디버깅  (1) 2024.10.29