- Published on
2023 JS, TS, CSS
2023 JS
Immutability(불변성) 관련 신규 method update
여러 method들이 추가가 되었지만, 개인적으로는 Immutability에 관련된 method들이 눈에 띄었다.
Array.prototype.toReversed(), Array.prototype.toSorted()
reverse() vs toReversed()
reverse()
- 원본 데이터를 참조 & 반환.
- 역순 로직을 수행하기 때문에 원본 데이터도 수정이 이루어짐.
toReversed()
- 역순 전환된 새로운 Array를 반환.
- 원본 데이터 유지.
Array reverse 구현 방식.
// reverse() // 불변성을 유지하기 위해 결과물을 담을 reversedArray를 생성 한 후, // 원본 array를 asign 하고 역순. const array = [0, 1, 2, 3]; const reversedArray = [...array]; reversedArray.reverse(); // toReversed() const array = [0, 1, 2, 3]; const reversedArray = array.toReversed(); console.log(array); // [0, 1, 2, 3] console.log(reversedArray); // [3, 2, 1, 0]
sort() vs toSorted()
sort()
- 원본 데이터를 참조 & 반환.
- 역순 로직을 수행하기 때문에 원본 데이터도 수정이 이루어짐.
toSorted()
- 역순 전환된 새로운 Array를 반환.
- 원본 데이터 유지.
- Array sort 구현 방식.
// sort() // 불변성을 유지하기 위해 결과물을 담을 sortedArray를 생성 한 후, // 원본 array를 asign 하고 정렬. const array = [0, 1, 2, 3]; const sortedArray = [...array]; sortedArray.sort((a, b) => b - a); // toReversed() const array = [0, 1, 2, 3]; const sortedArray = array.toSorted((a, b) => b - a); console.log(array); // [0, 1, 2, 3] console.log(sortedArray); // [3, 2, 1, 0]
Array.prototype.with()
array 단일 요소 변경 후, 새로운 array를 반환
원본 데이터 유지.
Array with 구현 방식.
// 기존 // 불변성을 유지하기 위해 결과물을 담을 changedArray를 생성 한 후, // 원본 array를 asign 하고 역순. const array = [0, 1, 2, 3]; const changedArray = [...array]; changedArray[2] = 99; console.log(changedArray); // [0, 1, 99, 3] // toChanged() const array = [0, 1, 2, 3]; const changedArray = array.with(2, 99); console.log(array); // [0, 1, 2, 3] console.log(changedArray); // [0, 1, 99, 3]
Array.prototype.findLast(), Array.prototype.findLastIndex()
- find(), findIndex()와 사용법이 동일하며 마지막 item & index를 반환.
Array.prototype.toSpliced()
array 요소 분리 후, 새로운 array를 반환
원본 데이터 유지.
Array splice 구현 방식.
// splice() // 불변성을 유지하기 위해 결과물을 담을 changedArray를 생성 한 후, // 원본 array를 asign 하고 역순. const array = [0, 1, 2, 3]; const splicedArray = [...array]; const result = splicedArray.splice(0, 2, ...[4, 5]); console.log(splicedArray); // [2, 3, 4, 5] // toReversed() const array = [0, 1, 2, 3]; const splicedArray = array.toSpliced(0, 2, ...[4, 5]); console.log(array); // [0, 1, 2, 3] console.log(splicedArray); // [2, 3, 4, 5]
번외. 2022 JS
await without async
top level await
- async 없이 await 사용 가능.
error cause
Error 객체의 구체화.
// before new Error('무슨 무슨 이유로 실패햇슴다'); // after new Error('무슨 에러임다', { cause: '이게 원인인거 같슴다.' });
at()
array[x] 와 거의 유사한 기능.
const array = ['a', 'b', 'c', 'd', 'e']; // array[x]와 차이점. 뒤로 검색 가능 array.at(-1); // 'e'
class private field, static
oop class의 private와 동일한 기능.
constructor에서 선언하지 않아도 가능.
field 앞에 # or private을 붙이면 됨.
class TestClass { #privateField = 'Hi'; private privateFnc = () => 'HiHi'; } // static 이전 구현 방식. class TestClass { ... } TestClass.build() { ... } // 현재 class TestClass { static build() { ... } }
2023 CSS
크로스 브라우징 & 반응형에 대한 해결방법 위주로 업데이트 되었다.
@supports
브라우저의 기능 지원 여부에 따라 css 분기 가능도록 제공.
not, and, or 연산자 지원.
@supports와 selector 함수는 현재 모든 주요 브라우저에서 지원중.
// 기본 header { display: flex; } // grid를 제공하는 브라우저 display 설정. @supports (display: grid) { header { display: grid; } } // not 연산자 활용 @supports not (display: grid) { header { display: flex; } } // selector 활용 @supports selector(:first-child) { li:first-child { color: red; } }
@property
css props를 변수화.
장점이자 단점은 전역으로 선언됨.
css in js를 사용하는 프로젝트에선 실용성이 떨어짐.
@property --primaryColor { syntax: "<color>"; initial-value: red; inherits: false; } .link { color: var(--primaryColor); //red } .link:hover { --primaryColor: blue; // blue } .link:first-child:hover { --primaryColor: false; // red }
:nth-child( x of selector) of selector
selector의 조건에 해당하는 child를 선택.
selector 자체를 지양하는 현재 트렌트에서 실용성이 낮음.
<li></li> <li class="link"></li> // a <li></li> <li></li> <li class="link"></li> // b <li></li> :nth-child(2) .link {} // a를 선택 :nth-child(2 of .link) {} // b를 선택