일관된 유형 규칙은 이론적으로 간단합니다. 모든 값은 하나의 유형 만 있어야합니다. 강력하게 타이핑 된 언어는 컴파일러 수준 에서이 규칙을 시행하며, 마음대로 유형을 혼합하고 일치시킬 수 없습니다. 약한 유형은 우리에게 많은 자유를줍니다. 일반적인 예는 숫자를 문자열로 연결하는 것입니다. 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 모듈로 들어가므로 데이터를 올바른 형식으로 변환해야합니다. 모듈의 가장자리에서 유형 변환을 수행하면 내부적으로 처리 할 필요가 없습니다. 이것은 암시 적 유형 주조의 가능성을 크게 줄여 오류를 일으킨다. 또한 잘못된 값이 모듈에서 모듈을 입력 할 수 없기 때문에 코드를 적게 쓸 수 있습니다.
타입 및 유형 확인 <🎜 🎜 🎜>