다섯 가지 자바스크립트 실수를 피하세요
javascript 열에는 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만드는 5가지 팁이 나열되어 있습니다.
오래된 프로젝트를 편집할 때 새로운 로직이 추가되자마자 "깨지는" 혼란스러운 코드를 만난 적이 있나요? 물론 우리 모두 거기에 가본 적이 있습니다.
읽을 수 없는 Javascript
코드로부터 세상을 구하기 위해 저는 여러분께 다음 다섯 가지 예를 보여 드리고 싶습니다. 바로 제 수치심의 기둥입니다. Javascript
代码更少,我得给你们看看以下的五个例子 -- 我的耻辱柱。
使用数组解构获取函数的多个返回值
如果我们有一个返回多个值的函数,可以使用数组解构实现取值。代码如下:
const func = () => { const a = 1; const b = 2; const c = 3; const d = 4; return [a,b,c,d]; }const [a,b,c,d] = func();console.log(a,b,c,d); // Outputs: 1,2,3,4复制代码
虽然上面的方法能实现赋值,但是它有一些副作用。
调用函数得到返回值 a,b,c,d
时,我们需要注意返回值返回的顺序。这里的一个小错误很可能就是你 debug 路上的梦魇。
除了需要注意顺序,我们还不能只获取想要的其中几个返回值,假如我只想要 c,d
배열 분해를 사용하여 함수의 여러 반환 값을 얻습니다
여러 값을 반환하는 함수가 있는 경우 배열 분해를 사용하여 값을 얻을 수 있습니다. 코드는 다음과 같습니다.
const func = () => { const a = 1; const b = 2; const c = 3; const d = 4; return {a,b,c,d}; }const {c,d} = func();复制代码
위 방법으로 할당을 달성할 수 있지만 몇 가지 부작용이 있습니다.
반환값 a,b,c,d
를 가져오는 함수를 호출할 때 반환값이 반환되는 순서에 주의해야 합니다. 여기서 작은 실수는 디버깅의 악몽이 될 수 있습니다.
순서에 주의를 기울이는 것 외에도 원하는 반환 값 중 일부만 얻을 수는 없습니다. c,d
만 원하는 경우에는 어떻게 되나요?
const func = () => { const a = 1; const b = 2; const c = 3; const d = 4; return {a,b,c,d}; }const {c,d} = func();复制代码
객체 분해 할당을 사용하여 대체할 수 있습니다.
// badfunction getDaysRemaining(subscription) { const startDate = subscription.startDate; const endDate = subscription.endDate; return endDate - startDate; }复制代码
이제 필요한 함수 반환 값을 자유롭게 선택할 수 있습니다. startDate
和 endDate
。
一个更好的方案是使用对象解构在一行里面获取入参 startDate
和 endDate
。
// betterfunction getDaysRemaining(subscription) { const { startDate, endDate } = subscription; return startDate - endDate; }复制代码
我们甚至可以直接在入参使用对象解构定义这两个变量。
// even betterfunction getDaysRemaining({ startDate, endDate }) { return startDate - endDate; } Much more elegant wouldn’t you agree?复制代码
你难道不觉得这样实现更优雅吗?
不使用展开语法(...)拷贝数组
使用 for
循环遍历元素再拷贝到新数组除了繁琐还很丑陋。
使用展开语法可以让实现更加清晰和简洁。
const stuff = [1,2,3];// badconst stuffCopyBad = []for(let i = 0; i < stuff.length; i++){ stuffCopyBad[i] = stuff[i]; }// goodconst stuffCopyGood = [...stuff];复制代码
使用 Var
使用 const
let
代替 var
。
let
作用于块作用域,而 var
作用于函数作用域。
块作用域使变量仅在定义它的代码块中有效,在块作用域外访问变量将会提示 ReferenceError。
// badvar x = "badX";var y = "baxY";// goodconst x = "goodX";const y = "goodX";复制代码
定义在函数作用域的变量可以在定义它的函数范围内使用。
for(let i = 0; i < 10; i++){ //something} print(i) // ReferenceError: i is not defined复制代码
let
和const
定义都变量都可以在块作用域访问到。
不使用模板字符串
手动拼接字符串写起来非常复杂,读起来很困惑。看例子:
for(var i = 0; i < 10; i++){ //something}console.log(i) // Outputs 10复制代码
模板字符串提供清晰和易读的在字符串插入变量的方法。
// badfunction printStartAndEndDate({ startDate, endDate }) { console.log('StartDate:' + startDate + ',EndDate:' + endDate) }复制代码
模板字符串提供了也简单的方法换行,你只需要在键盘按下 enter
함수 매개변수에는 객체 구조 분해가 사용되지 않습니다.
입력 매개변수가 객체인 함수가 있고 함수 내의 코드가 이 객체의 속성을 사용해야 한다고 가정해 보겠습니다. 순진한 구현은 다음과 같습니다.이 솔루션은 우리의 요구 사항을 충족하지만 두 개의 불필요한 임시 참조 변수// goodfunction printStartAndEndDate({ startDate, endDate }) { console.log(`StartDate: ${startDate}, EndDate: ${endDate}`) }复制代码로그인 후 복사startDate
및endDate
를 선언합니다. 더 나은 해결책은 객체 구조 분해를 사용하여 입력 매개변수startDate
및endDate
를 한 줄로 얻는 것입니다.객체 구조 분해를 사용하여 입력 매개변수에서 이 두 변수를 직접 정의할 수도 있습니다. rrreee이게 더 우아하지 않나요?// prints on two linesfunction printStartAndEndDate({ startDate, endDate }) { console.log(`StartDate: ${startDate} EndDate: ${endDate}`) }复制代码로그인 후 복사확장 구문을 사용하지 않고 배열 복사(...)
for
를 사용하여 요소를 반복한 다음 새 배열에 복사하는 것은 번거로울 뿐만 아니라 추악하기도 합니다. 🎜🎜확장 구문을 사용하면 구현이 더 명확하고 간결해질 수 있습니다. 🎜rrreee
Var
사용🎜🎜변수를 다시 할당할 수 없도록const
를 사용하면 버그가 줄어들고 코드가 개선됩니다. 가독성 . 🎜rrreee🎜정말로 변수를 다시 할당해야 한다면 항상 var를 그대로 두는 것이 좋습니다. 정말로 변수를 다시 할당해야 한다면var
대신let
을 사용하세요. 🎜🎜let
는 블록 범위에서 작동하고var
는 함수 범위에서 작동합니다. 🎜🎜블록 범위는 변수가 정의된 코드 블록에서만 유효하도록 만듭니다. 블록 범위 외부의 변수에 액세스하면 ReferenceError가 발생합니다. 🎜rrreee🎜함수 범위에 정의된 변수는 해당 변수가 정의된 함수 범위 내에서 사용할 수 있습니다. 🎜rrreee🎜let
및const
정의 변수는 모두 블록 범위에서 액세스할 수 있습니다. 🎜템플릿 문자열을 사용하지 않습니다. 🎜🎜 수동으로 문자열을 연결하는 것은 작성하기가 매우 복잡하고 읽기에도 혼란스럽습니다. 예를 참조하세요. 🎜rrreee🎜템플릿 문자열은 문자열에 변수를 삽입하는 명확하고 읽기 쉬운 방법을 제공합니다. 🎜rrreee🎜템플릿 문자열은 줄 바꿈을 위한 간단한 방법을 제공합니다. (시스템에서) 일반적으로 사용하는 것처럼 키보드의
enter
키만 누르면 됩니다. 🎜rrreee🎜🎜🎜더 많은 관련 무료 학습 권장 사항: 🎜🎜🎜javascript🎜🎜🎜(동영상)🎜🎜🎜위 내용은 다섯 가지 자바스크립트 실수를 피하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.
