VUE3.0을 빠르게 시작하는 방법:
"ES6 사용법을 알고 있다면 사용해 보세요!" 학습 시작하기: 리더가 코드 검토 중에 많은 것을 발견했기 때문에 팀원들에게 한 "포효"입니다. ES5 작성 방법을 사용하는 것이 더 좋습니다. ES5에서 작성한다고 해서 코드 양이 늘어나고 가독성이 떨어지는 것은 아닙니다.
마침 이 리더는 코드 페티쉬를 갖고 있었는데, 이 레벨에서 3~5년 정도 코드를 작성해본 경험이 있는 멤버들에게 계속해서 코드에 대한 불만을 토로하는 것에 대해 극도로 불만을 품고 있었습니다. 하지만 그래도 그 분의 불평을 통해 얻은 게 많다고 생각해서 리더의 불평을 녹음해서 동료 디버들과 공유했습니다. 유용하다고 생각하시면, 틀린 부분이나 더 좋은 글이 있으면 손가락으로 눌러주세요. 메시지를 남겨주세요.
추신: ES5 이후의 JS 구문을 통칭하여 ES6이라고 합니다! ! !
1. 값 수집에 대한 Tucao
값은 객체 obj
에서 값을 얻는 것과 같이 프로그램에서 매우 일반적입니다.
const 객체 = { a:1, b:2, c:3, d:4, 전자:5, }
투카오 :
const a = obj.a; const b = obj.b; const c = obj.c; const d = obj.d; const e = obj.e;
또는
const f = obj.a + obj.d; const g = obj.c + obj.e;
"ES6의 구조 분해 할당을 사용하여 값을 얻을 수 없나요? 한 줄의 코드에 5줄의 코드를 사용하는 것이 좋지 않나요? 그냥 객체 이름에 플러스를 사용하세요. 속성 이름을 사용하여 값을 가져옵니다. 개체 이름이 짧아도 괜찮지만 너무 길면 개체 이름이 코드 전체에 표시됩니다. "
개선 사항 :
const {a,b,c,d,e} = obj; const f = a + d; const g = c + e;
반론은
내가 ES6의 구조 분해 할당을 사용하지 않는다는 것이 아니라 서버에서 반환된 데이터 객체의 속성 이름이 내가 원하는 것과 다르다는 것입니다. 순회 할당을 다시 만듭니다.
ES6의 구조 분해 및 할당에 대한 이해가 충분하지 않은 것 같습니다
.
생성하려는 변수의 이름이 객체의 속성 이름과 일치하지 않는 경우 다음과 같이 작성할 수 있습니다.
const {a:a1} = obj; console.log(a1); // 1
보충
ES6 구조 분해 할당은 사용하기 쉽습니다. 그러나 구조해제된 객체는 undefined
되지 않거나 null
일 수 없다는 점에 유의하세요. 그렇지 않으면 오류가 보고되므로 구조 해제된 개체에 기본값을 제공해야 합니다.
const {a,b,c,d,e} = obj || {}2.
두 배열 병합 및 두 개체 병합과 같은
데이터 병합에 대한 불만입니다
.const a = [1,2,3]; const b = [1,5,6]; const c = a.concat(b);//[1,2,3,1,5,6] const obj1 = { a:1, } const obj2 = { b:1, } const obj = Object.sign({}, obj1, obj2);//{a:1,b:1}은ES6의 확장 연산자를 잊어버렸는지 여부
에 대해 불평했으며
배열 병합 시 중복 제거를 고려하지 않았나요?
개선된
const a = [1,2,3]; const b = [1,5,6]; const c = [...new Set([...a,...b])];//[1,2,3,5,6] const obj1 = { a:1, } const obj2 = { b:1, } const obj = {...obj1,...obj2};//{a:1,b:1}
3. 문자열 연결에 대한 Tucao
const name = 'Xiao Ming'; const 점수 = 59; 결과 = ''; if(점수 > 60){ 결과 = `${name}의 시험 점수는 합격입니다`; }또 다른{ 결과 = `${name}이(가) 시험에 실패했습니다`; }당신처럼 ES6 문자열 템플릿을 사용하는 것에
대해 불평한다면
, ${}
에서 어떤 작업을 수행할 수 있는지 전혀 모르는 것이 좋습니다. ${}
에서는 JavaScript 표현식을 입력하고, 작업을 수행하고, 객체 속성을 참조할 수 있습니다.
향상된
const 이름 = 'Xiao Ming'; const 점수 = 59; const result = `${name}${score > 60?'의 시험 점수 합격':'의 시험 점수 실패'}`
4. if
( 유형 == 1 || 유형 == 2 || 유형 == 3 || 유형 == 4 || ){ //... }
배열 인스턴스 메소드 includes
이 ES6에서 사용될 것인지에
대해 불평하십니까
?개선된
const 조건 = [1,2,3,4]; if( 조건.포함(유형) ){ //... }
5. 목록 검색에 대한 불만
프로젝트에서는 페이지가 매겨지지 않은 일부 목록의 검색 기능이 프런트 엔드에 의해 구현됩니다. 검색은 일반적으로 정밀 검색과 퍼지 검색으로 구분됩니다. 검색은 필터링이라고도 하며 일반적으로 filter
사용하여 구현됩니다.
const a = [1,2,3,4,5]; const 결과 = a.filter( 항목 =>{ 반품 항목 === 3 } )정확한 검색에 대해
불평하고
싶다면ES6에서는 find
사용하지 않겠습니까? 성능 최적화를 이해하셨나요? 조건에 맞는 항목이 find
메소드에서 발견되면 더 이상 배열을 순회하지 않습니다.
개선된
const a = [1,2,3,4,5]; const 결과 = a.find( 항목 =>{ 반품 항목 === 3 } )
6. 평면화된 배열에 대한 불만
부서의 JSON 데이터에서 속성 이름은 부서 ID이고 속성 값은 부서 구성원 ID의 배열 모음입니다. 이제 모든 부서 구성원 ID를 배열 모음으로 추출해야 합니다.
const deps = { '구매 부서':[1,2,3], '인사부':[5,8,12], '행정 부서':[5,14,79], '교통부':[3,64,105], } 멤버 = []로 설정; for (항목을 deps로 설정){ const 값 = deps[item]; if(Array.isArray(값)){ 멤버 = [...멤버,...값] } } member = [...new Set(member)]
객체의 모든 속성 값을 얻으려면 순회해야 합니까
?
Object.values
잊으셨나요? 배열을 포함하는 flat
프로세스도 있습니다. 다행히도 이번에는 배열의 깊이가 4차원 또는 5차원 배열을 만나는 경우 필요합니까? 중첩된 루프를 반복하여 병합하시겠습니까?
개선
= { '구매 부서':[1,2,3], '인사부':[5,8,12], '행정 부서':[5,14,79], '교통부':[3,64,105], } let member = Object.values(deps). flat(Infinity);
Infinity
flat
의 매개변수로 사용되므로 평면화된 배열의 크기를 알 필요가 없습니다.
flat
방식은 IE 브라우저를 지원하지 않는다는
점을 보완했습니다
.7. 객체 속성 값 가져오기에 대한 Tucao
const
name = obj && obj.name;
ES6의 선택적 체인 연산자가 사용됩니까?
개선된
const name = obj?.name;
8. 객체 속성 추가에 대한 설명
객체에 속성을 추가할 때 속성 이름이 동적으로 변경되는 경우 어떻게 해야 합니까?
obj = {}로 놔두세요; 인덱스 = 1로 둡니다. 키 = `topic${index}`; obj[key] = 'topic content';
Tucao에서
추가 변수를 생성해야 하는 이유. ES6에서 객체 속성 이름에 표현식을 사용할 수 있는지 궁금합니다.
let obj = {};
개선
인덱스 = 1로 둡니다. obj[`topic${index}`] = 'topic content';
9. 입력 상자가 비어 있지 않은지 판단
입력 상자 관련 업무를 처리하다 보면 입력 상자에 입력 값이 없다고 판단되는 경우가 많습니다.
if(값 !== null && 값 !== 정의되지 않음 && 값 !== ''){ //... }
ES6의 새로운 null 값 병합 연산자에 대해 들어보셨나요? 그렇게 많은 조건을 작성해야 합니까
?
if((값??'') !== ''){ //... }
10. 비동기 함수에 대한 불만
비동기 함수는 매우 일반적이며 Promise를 사용하여 구현되는 경우가 많습니다.
const fn1 = () =>{ return new Promise((해결, 거부) => { setTimeout(() => { 해결(1); }, 300); }); } const fn2 = () =>{ return new Promise((해결, 거부) => { setTimeout(() => { 해결(2); }, 600); }); } const fn = () =>{ fn1().then(res1 =>{ console.log(res1); // 1 fn2().then(res2 =>{ console.log(res2) }) }) }이와 같은 비동기 함수를
호출
하면지옥 같은 콜백을 두려워하지 않을 것입니다!
const fn = async ()개선
=>{ const res1 = fn1()을 기다립니다; const res2 = fn2()를 기다립니다; console.log(res1); // 1 console.log(res2);// 2 }
보충
: 동시 요청을 하는 경우에도 Promise.all()
사용해야 합니다.
const fn = () =>{ Promise.all([fn1(),fn2()]).then(res =>{ console.log(res);//[1,2] }) }
동시 요청이 있는 경우 비동기 함수 중 하나가 완료되면 결과가 반환되며 Promise.race()
사용해야 합니다.
11.
위의 리더의 불만 사항 10가지에 대해 반박하실 수 있습니다. 귀하의 반박이 타당하다면 다음 코드 검토 회의에서 반박해 드리겠습니다.
또한, 위 정리된 내용에 오류가 있는 경우 댓글로 자유롭게 수정해 주시면 감사하겠습니다.
이 글은 다음에서 복사했습니다: https://juejin.cn/post/7016520448204603423
작성자: Hongchen Lianxin
[관련 영상 튜토리얼 추천: 웹 프론트엔드]
위에서 ES6를 사용할 수 있다고 하신 다음, 빨리 사용해보세요! 더 자세한 사항은 PHP 중국어 홈페이지의 다른 관련 글을 참고해주세요!