> 웹 프론트엔드 > JS 튜토리얼 > JS의 강력하게 타이핑 된 언어에서 기술을 빌려줍니다

JS의 강력하게 타이핑 된 언어에서 기술을 빌려줍니다

Christopher Nolan
풀어 주다: 2025-02-21 08:38:12
원래의
568명이 탐색했습니다.

Borrowing Techniques from Strongly Typed Languages in JS 이 기사에서는 JavaScript 코드에서 강력하게 타이핑 된 언어를 사용하는 방법에 대해 설명합니다. 이러한 기술은 코드 오류를 줄일뿐만 아니라 코드 양을 줄입니다. 이 기사는 JavaScript를 예를 들어 취하지 만 이러한 팁은 대부분의 약한 언어에도 적용됩니다.

키 포인트 :

JavaScript에서 강력하게 타이핑 된 언어를 적용하는 팁은 버그를 줄이고 코드 볼륨을 줄일 수 있습니다.

"일관된 유형 규칙"(모든 값이 하나의 유형 만있는 것을 지정 함)을 JavaScript에 적용하여 코드 품질 및 가독성을 향상시킬 수 있습니다. 유형 확인 및 유형 변환은 모듈의 가장자리에서 수행되어 암시 적 유형 주조로 인한 버그를 방지하고 코드를 단순화해야합니다. javaScript에서"null "및"undefined "의 사용은 특히 객체 및 배열과 같은 참조 유형을 다룰 때 신중하게 고려해야합니다.

typeScript는 조기 오류 감지 및 명확한 코드 문서와 같은 장점이있는 JavaScript에서 강력한 타이핑 시맨틱을 시행하기위한 권장 도구입니다. 일관된 유형 규칙을 소개하십시오 일관된 유형 규칙은 이론적으로 간단합니다. 모든 값은 하나의 유형 만 있어야합니다. 강력하게 타이핑 된 언어는 컴파일러 수준 에서이 규칙을 시행하며, 마음대로 유형을 혼합하고 일치시킬 수 없습니다. 약한 유형은 우리에게 많은 자유를줍니다. 일반적인 예는 숫자를 문자열로 연결하는 것입니다. C와 같은 언어에서와 같이 지루한 유형 변환을 수행 할 필요가 없습니다. 걱정하지 마십시오. 모든 편의를 포기하라고 말하지 않을 것입니다. 일관된 유형 규칙을 사용하면 변수 및 기능이 작동하는 방식에주의를 기울여야하므로 코드가 개선됩니다.

변수의 유형 먼저, 규칙이 변수에 어떻게 적용되는지 봅시다. 매우 간단합니다. 변수에는 항상 하나의 유형 만 있어야합니다.

var a = [];
var b = a;

a.push('Hello');
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
위의 예는 문제를 보여줍니다. 이 규칙에 따라이 예제의 마지막 코드 줄은 변수 텍스트를 처음 정의 할 때 문자열 유형의 값을 제공하고 이제 숫자를 할당하기 때문에이 예제의 마지막 코드 줄이 오류를 던지는 척해야합니다. 일관된 유형 규칙은 이러한 방식으로 변수 유형을 변경할 수 없음을 의미합니다. 변수가 일관되면 코드를 추론하는 것이 더 쉽습니다. 특히 변수 소스를 쉽게 무시할 수있는 더 긴 함수에 도움이됩니다. 이 규칙을 따르지 않는 코드베이스에서 작업 할 때 실수로 변수가 선언 된 것을보고 같은 유형을 유지할 것이라고 가정했기 때문에 실수로 많은 오류가 발생했습니다. 일반적으로 다른 유형을 동일한 변수에 할당 할 이유가 없습니다.

함수 파라미터 입력 <🎜 🎜 🎜> 동일한 규칙도 여기에 적용됩니다. 함수의 매개 변수도 일관성이 있어야합니다. 오류의 예 :

여기에 문제가 무엇입니까? 일반적으로 유형 검사를 기반으로 한 분기 논리는 좋은 관행이 아니라고 믿어집니다. 이것에는 예외가 있지만 일반적으로 더 나은 선택은 다형성을 사용하는 것입니다. 함수 매개 변수에 하나의 유형 만 있는지 확인해야합니다. 다른 유형을 고려하는 것을 잊어 버린 경우 문제의 가능성이 줄어들고 모든 유형의 케이스를 처리하기 위해 코드를 작성할 필요가 없기 때문에 코드를 더 간단하게 만듭니다. 합 함수를 작성하는 더 나은 방법은 다음과 같습니다.

그런 다음 함수 대신 호출 코드에서 유형 확인을 처리합니다. 위에서 볼 수 있듯이이 기능은 이제 훨씬 간단합니다. 다른 곳에서 유형을 확인해야하더라도 코드에서 일찍 실행할수록 더 잘 작동합니다. 이 기사의 뒷부분에서 유형 검사 및 유형의 사용에 대해 논의 할 것입니다.

기능 입력 기능 반환 값 <🎜 🎜> 이것은 다른 두 가지와 관련이 있습니다. 함수는 항상 동일한 유형의 값을 반환해야합니다. 우리는 여기서 Angularjs의 예를 제시 할 수 있습니다. AngularJS는 텍스트를 Angular.LowerCase라고하는 소문자로 변환하는 함수를 제공합니다. 표준 함수, string.prototype.tolowercase도 있습니다. 우리는 그들의 행동을 비교하여 규칙 의이 부분을 더 잘 이해할 수 있습니다 :

변수 a는 당신이 기대하는 것을 포함합니다 : "Hello Type". 그러나 B는 무엇을 포함 할 것인가? 빈 문자열일까요? 함수가 예외를 던질까요? 아니면 그냥 널일까요? 이 경우 B의 값은 널입니다. 결과가 무엇인지 즉시 추측하기가 어렵습니다. 처음부터 세 가지 가능한 결과가 있습니다. 각도 함수의 경우 비 스트링 값의 경우 항상 입력을 반환합니다. 이제 내장 기능이 어떻게 행동하는지 봅시다 : <🎜 🎜>
var a = [];
var b = a;

a.push('Hello');
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
첫 번째 호출의 결과는 동일하지만 두 번째 호출은 예외를 던집니다. 내장 함수는 일관된 유형 규칙을 따르며 잘못된 매개 변수 유형을 허용하지 않습니다. 리턴 값은 항상 문자열입니다. 그래서 우리는 내장 기능이 더 좋다고 말할 수 있지만 정확히 어떻게 해야하는지 궁금 할 것입니까? 그러한 기능에 대한 일반적인 사용 사례를 고려해 봅시다. 코드의 어느 시점에서 문자열을 소문자로 변환하기 위해 사용합니다. JavaScript 코드에서 자주 발생하는 것처럼 입력이 항상 문자열인지 100% 결정할 수 없습니다. 우리는 좋은 프로그래머이고 코드가 잘못되지 않았다고 가정하기 때문에 괜찮습니다. 이 규칙을 준수하지 않는 AngularJS 기능을 사용하면 어떻게됩니까? 비 스트링 값은 아무런 문제없이 통과합니다. 여러 기능을 전달할 수 있으며 xmlhttprequest 호출을 통해 보낼 수도 있습니다. 이제 잘못된 값은 서버에 있으며 결국 데이터베이스로 이동합니다. 내가 무슨 뜻인지 알 수 있니? 규칙을 준수하는 내장 기능을 사용하는 경우 그 당시에 즉시 오류를 찾을 수 있습니다. 함수를 작성할 때마다 반환 된 유형이 일관되어 있는지 확인하십시오. 나쁜 예는 다음과 같습니다.

유사하게, 변수 및 매개 변수와 마찬가지로, 그러한 함수가 있다면, 우리는 그 행동에 대해 가정 할 수 없습니다. 값을 반환하는 유형을 확인하려면 사용해야합니다. 우리는 어느 시점에서 그것을 잊어 버린 다음 다른 오류가 우리 손에 나타납니다. 우리는 여러 가지 방법으로 그것을 다시 쓸 수 있습니다. 여기 에이 문제에 대한 해결책이 있습니다 :
var text = 'Hello types';

// 错误!不要这样做!
text = 1;
로그인 후 복사
로그인 후 복사

이번에는 모든 경로가 문자열을 반환하는지 확인합니다. 이제 함수의 결과를 유추하는 것이 더 쉽습니다.

function sum(a, b) {
  if (typeof a === 'string') {
    a = 1;
  }

  return a + b;
}
로그인 후 복사
<<> null과 정의되지 않은 것은 특별합니다 <🎜 🎜>

지금까지 우리는 실제로 원래 장르 만 논의했습니다. 객체와 어레이와 관련하여 동일한 규칙을 따라야하지만 두 가지 특별한 경우를 알고 있어야합니다. 참조 유형을 처리 할 때 때때로 값이 없음을 나타낼 필요가 있습니다. 좋은 예는 document.getElementById입니다. 일치하는 요소를 찾을 수 없으면 NULL을 반환합니다. 그렇기 때문에 NULL을 객체 나 배열로 유형을 공유하는 것으로 간주하지만 해당 객체 또는 배열 만 공유합니다. 숫자와 같은 원본 값을 반환 할 수있는 함수에서 null을 반환하지 않아야합니다. 정의되지 않은 것은 또한 언급 된 "귀중한"것으로 간주 될 수 있습니다. 대부분의 목적에서는 NULL과 동등한 것으로 간주 될 수 있지만 다른 객체 지향 언어의 의미론으로 인해 Null이 바람직합니다.

배열 및 null <🎜

배열을 사용할 때는 빈 배열이 일반적으로 널보다 낫다는 것을 고려해야합니다. 배열은 참조 유형이지만 Null을 사용할 수 있지만 일반적으로 빈 배열을 반환하는 것이 더 합리적입니다. 다음 예를 살펴 보겠습니다

var a = [];
var b = a;

a.push('Hello');
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
이것은 아마도 가장 일반적인 배열 사용 중 하나 일 것입니다. 함수에서 배열을 얻고 다른 작업을 수행하기 위해 반복합니다. 프로젝트가 없을 때 getListOfitems가 NULL을 반환하면 위 코드는 어떻게됩니까? NULL의 길이 (또는 다른 속성)가 없기 때문에 오류가 발생합니다. 이와 같은 배열 사용을 고려하거나 List.Foreach 또는 list.map을 고려하면 값이 없을 때 빈 배열을 반환하는 것이 일반적으로 좋은 생각임을 알 수 있습니다.

<<> 체크 유형 확인 및 유형 변환

<🎜 🎜> 유형 검사에 대해 자세히 알아 보겠습니다. 언제 확인해야합니까? 언제 변환을 유형해야합니까? <<> 유형 변환 <🎜 🎜> 유형 변환의 첫 번째 목표는 값이 올바른 유형인지 확인하는 것입니다. 값은 문자열이 아닌 숫자 여야합니다. 두 번째 목표는 값을 한 번만 변환하면됩니다. 유형 변환을 수행하기에 가장 좋은 곳은 소스에 있습니다. 예를 들어, 서버에서 데이터를 가져 오면 수신 된 데이터를 처리하는 기능에서 필요한 유형 변환을 수행해야합니다. DOM의 데이터를 구문 분석하는 것은 오류가 발생하기 시작하는 매우 일반적인 장소입니다. 숫자가 포함 된 텍스트 상자가 있고 그것을 읽고 싶다고 가정합니다. 또는 일부 HTML 요소의 속성 일 수 있으며 사용자 입력 일 필요조차 없습니다.

DOM에서 얻을 수있는 값은 일반적으로 문자열이므로 읽을 때 변환을 입력하는 것이 중요합니다. 어느 정도까지, 당신은 그것을 모듈의 "가장자리"라고 생각할 수 있습니다. 데이터는 함수를 읽음으로써 JavaScript 모듈로 들어가므로 데이터를 올바른 형식으로 변환해야합니다. 모듈의 가장자리에서 유형 변환을 수행하면 내부적으로 처리 할 필요가 없습니다. 이것은 암시 적 유형 주조의 가능성을 크게 줄여 오류를 일으킨다. 또한 잘못된 값이 모듈에서 모듈을 입력 할 수 없기 때문에 코드를 적게 쓸 수 있습니다.

타입 및 유형 확인 <🎜 🎜 🎜> 유형 분기 로직을 ​​기반으로하지 않고 유효성 검사를 위해 유형을 사용해야합니다. 이것에는 몇 가지 예외가 있지만 좋은 경험 법칙입니다. 두 가지 예를 봅시다 :

이것은 유효성 검사를 위해 typeof를 사용하는 예입니다. 함수로 전달 된 매개 변수가 올바른 유형인지 확인합니다. 그러나 다음 예제는 분기 로직이 유형을 기반으로 한 내용을 보여줍니다.

var a = [];
var b = a;

a.push('Hello');
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
<.> 이것을하지 마십시오. 때때로 그렇게해야 할 수도 있지만, 이것은 종종 디자인이 열악하다는 표시입니다. 이 논리를 자주 실행하는 것을 발견하면 코드 초기에 값을 올바른 유형으로 변환해야합니다. 코드에서 많은 유형을 사용하는 경우 비교하려는 값을 변환해야 할 수도 있습니다. 유형 검사는 종종 확산되는데, 이는 일반적으로 설계되지 않은 유형의 표시입니다. 앞에서 언급했듯이 캐스케이드 유형을 피할 수 있으므로 모듈 가장자리에서 유형 변환을 시도해야합니다. 가능한 한 빨리 변환하는 경우 나중에 호출하는 기능이 없으면 유형 확인 또는 유형 변환을 수행 할 필요가 없습니다. 이것은 객체에도 적용됩니다. 많은 검사를 위해 인스턴스를 사용하거나 객체의 속성을 확인하는 경우 다른 방식으로 데이터를 구성해야합니다. Typeof와 동일한 규칙도 인스턴스에도 적용됩니다. 디자인 부호가 좋지 않을 수 있으므로 피해야합니다. 그러나 불가피한 한 가지 상황이 있습니다

코드가 예외 유형을 처리 해야하는 경우 JavaScript 캐치는 다른 언어와 같이 유형별로 구별 할 수 없으므로 인스턴스는 일반적으로 좋은 선택입니다. 대부분의 다른 경우에는 인스턴스를 피해야합니다.

<🎜 🎜> <<> 결론
var text = 'Hello types';

// 错误!不要这样做!
text = 1;
로그인 후 복사
로그인 후 복사

우리가 발견 한 바와 같이, 약한 유형의 JavaScript는 우리에게 큰 자유를 가져다 주지만, 우리도 조심해야합니다. 그렇지 않으면, 우리는 의미가없는 장르 혼란에 빠질 것입니다. 우리의 코드가 일관된 유형 규칙을 준수하도록함으로써 많은 문제를 피할 수 있습니다. 유형을 알 때 코드를 추론하는 것이 더 쉽습니다. 오류를 방지하기 위해 코드에 많은 유형 검사를 구축 할 필요가 없습니다. 강력하게 입력 한 언어를 사용하지 않는 경우에는 어려운 것처럼 보이지만 코드를 디버그하거나 유지해야 할 때 많은 비용을 지불합니다. 이 주제에 대한 자세한 내용은 TypeScript를 확인하는 것이 좋습니다. JavaScript와 같은 언어이지만 언어에 더 강력한 시맨틱을 추가합니다. 또한 믹싱 및 어울리는 유형과 같은 어리석은 일을하려고 할 때 오류를 일으키는 컴파일러가 있습니다.

JavaScript (FAQ)의 강력하게 타이핑 된 언어에 대한 FAQ 강력하게 입력 된 언어와 약하게 타이핑 된 언어의 차이점은 무엇입니까?

강력하게 입력 한 언어는 변수가 특정 데이터 유형에 결합되는 언어를 나타냅니다. Java와 C가 있습니다. 반면에 JavaScript와 같은 약하게 타이핑 된 언어는 변수가 모든 유형의 데이터를 보유하고 필요한 경우 자동으로 변환을 입력 할 수 있습니다. 부적절하게 처리되면 이러한 유연성으로 인해 예상치 못한 결과가 발생할 수 있습니다. JavaScript에서 강력한 타이핑을 시행하는 방법은 무엇입니까?

JavaScript 자체는 약하게 타이핑 된 언어이지만 정적으로 입력 한 JavaScript의 슈퍼 세트 인 TypeScript를 사용하여 강력한 유형을 시행 할 수 있습니다. TypeScript는 정적 유형을 JavaScript에 추가하여 컴파일 시간에 유형 확인을 허용합니다. 이는 개발 프로세스 초기 오류를 감지하는 데 도움이됩니다. "Strict Pattern"은 JavaScript의 또 다른 방법으로 언어가 불안한 행동에 대한 오류를 던져서 강력하게 입력 한 언어처럼 행동하게합니다.

강력하게 타이핑 된 언어를 사용하면 어떤 이점이 있습니까?

강력하게 타이핑 된 언어는 몇 가지 이점을 제공합니다. 런타임이 아닌 컴파일 시간에 오류를 잡을 수 있으므로 많은 디버깅 시간을 절약 할 수 있습니다. 또한 변수의 데이터 유형이 사용 방법을 명확하게 나타내기 때문에 코드를보다 자체 문서화합니다. 또한 예상치 못한 유형 변환을 방지하기 때문에 코드를보다 예측 가능하고 유추하기가 더 쉽게 만들 수 있습니다.

JavaScript를 강력하게 입력 한 언어로 사용할 수 있습니까?

JavaScript는 기본적으로 강력하게 입력 된 언어가 아니지만 TypeScript 또는 Flow와 같은 도구를 사용하여 강력한 타이핑을 시행 할 수 있습니다. 이 도구는 정적 유형을 JavaScript에 추가하여 컴파일 시간에 유형 확인을 허용합니다. 이는 개발 프로세스 초기 오류를 감지하는 데 도움이됩니다. 그러나 이러한 도구는 JavaScript의 기본 특성을 바꾸지 않는 것이 중요합니다.

TypeScript 란 무엇이며 JavaScript와 어떤 관련이 있습니까?

TypeScript는 Microsoft가 개발 한 JavaScript 정적으로 입력 한 슈퍼 세트입니다. 정적 유형을 JavaScript에 추가하여 컴파일 시간에 유형 확인을 허용합니다. 이는 개발 프로세스 초기 오류를 감지하는 데 도움이됩니다. TypeScript 코드는 JavaScript로 변환되므로 JavaScript가 실행되는 곳이면 어디서나 실행될 수 있습니다. JavaScript와 완전히 호환되며 JavaScript의 모든 기능을 사용할 수 있습니다.

강력하게 타이핑 된 언어를 사용하는 단점은 무엇입니까?

강하게 타이핑 된 언어는 많은 이점을 제공하지만 몇 가지 단점도 있습니다. 그들은 더 장황 할 수 있으며 약한 언어와 동일한 작업을 완료하기 위해 더 많은 코드가 필요합니다. 또한 컴파일 단계가 필요하므로 개발 프로세스가 느려질 수 있습니다. 또한, 유연성이 떨어지고 동적 데이터 처리와 같은 특정 작업에 사용하기가 더 어려울 수 있습니다.

"엄격한 모드"는 JavaScript에서 어떻게 작동합니까?

"엄격한 패턴"은 JavaScript의 기능으로 언어가 강력하게 입력 된 언어처럼 행동하게합니다. 값을 읽기 전용 속성에 할당하거나 변수를 선언하기 전에 변수를 사용하는 것과 같은 안전하지 않은 작업에 오류가 발생합니다. 이는 개발 프로세스 초기 오류를 감지하는 데 도움이됩니다. "Strict Mode"를 활성화하려면 JavaScript 파일 또는 함수의 상단에 "Strict 사용"을 추가하십시오.

JavaScript의 유형 강요는 무엇입니까?

유형 강요는 JavaScript의 기능으로 언어가 필요한 경우 한 데이터 유형을 다른 데이터 유형으로 자동 변환합니다. 예를 들어, 숫자와 문자열을 추가하려고하면 JavaScript는 추가를 수행하기 전에 숫자를 문자열로 변환합니다. 이것은 편리하지만 부적절하게 처리하면 예상치 못한 결과로 이어질 수 있습니다.

JavaScript에서 유형 강요를 피하는 방법은 무엇입니까?

JavaScript에서 유형 강요를 피하는 한 가지 방법은 "Strict Mode"를 사용하는 것입니다. 또 다른 방법은 전자가 유형 강요를 수행하지 않기 때문에 "=="연산자 대신 "==="연산자를 사용하는 것입니다. 또한 TypeScript 또는 Flow와 같은 도구를 사용하여 정적 유형을 JavaScript에 추가하여 컴파일 시간에 유형 관련 오류를 포착 할 수 있습니다.

JavaScript에서 강력하게 타이핑 된 언어의 미래는 무엇입니까?

JavaScript에서 강력하게 타이핑 된 언어를 사용하면 미래에 오류를 조기에 잡히고 코드를보다 예측할 수있게하는 것과 같은 많은 이점을 제공하기 때문입니다. TypeScript 및 Flow와 같은 도구가 점점 인기가 높아지고 있으며 JavaScript를보다 유형으로 세우기 위해 새로운 도구와 기능이 개발되고 있습니다. 그러나 JavaScript의 유연성과 역 동성은 많은 개발자에게 계속 최초의 선택이 될 것입니다.

위 내용은 JS의 강력하게 타이핑 된 언어에서 기술을 빌려줍니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿