Javascript 언어의 디자인은 충분히 엄격하지 않으며 주의하지 않으면 여러 곳에서 오류가 발생할 수 있습니다.
예를 들어, 다음과 같은 상황을 생각해 보세요.
이제 전역 개체 myObj가 존재하는지 확인해야 합니다. 존재하지 않으면 선언하세요. 자연어로 기술한 알고리즘은
이 코드를 작성하는 것이 쉽다고 생각할 수도 있습니다. 그러나 실제로 관련된 문법적 문제는 우리가 상상하는 것보다 훨씬 더 복잡합니다. Juriy Zaytsev는 Javascript 객체가 존재하는지 확인하는 방법이 50가지 이상 있다고 지적했습니다. Javascript 언어의 구현 세부 사항에 대해 매우 명확한 경우에만 둘 사이의 차이점을 알 수 있습니다.
코드는 다음과 같습니다. 다음과 같습니다:
또는 다음과 같이 작성합니다. 이:
if (!window.myObj) {
window.myObj = { }
}
세 번째 작성 방법
위 작성 방법의 단점은 일부 실행 환경(V8, Rhino 등)에서는 window가 최상위 개체가 아닐 수 있다는 것입니다. 따라서 다음과 같이 다시 작성해 보세요.
코드는 다음과 같습니다.
전역 변수 수준에서 this 키워드는 항상 최상위 변수를 가리키므로 다양한 운영 환경에 독립적일 수 있습니다.
네 번째 작성 방법
그러나 위의 작성 방법은 가독성이 떨어지고 this의 포인터가 가변적이고 오류가 발생하기 쉬우므로 추가로 다시 작성합니다.
var global = this; > if (!global.myObj) {
global.myObj = { };
}
사용자 정의 변수 global을 사용하는 것이 훨씬 더 명확합니다. 최상위 객체.
다섯 번째 작성 방법
typeof 연산자를 사용하여 myObj가 정의되었는지 확인할 수도 있습니다.
if (typeof myObj == "undefine" ) {
var myObj = {};
}
현재 자바스크립트 객체가 존재하는지 확인하는 데 가장 널리 사용되는 방법입니다.
6번째 작성 방법
myObj의 값은 정의되었으나 할당되지 않은 경우 정의되지 않은 값과 동일하므로 위의 작성 방법을 단순화할 수 있습니다.
if (myObj == undefine) {
var myObj = { };
}
여기서 주목해야 할 두 가지 사항이 있습니다. 첫째, 두 번째 줄의 var 키워드는 누락될 수 없습니다. 그렇지 않으면 ReferenceError 오류가 발생합니다. , undefed는 작은따옴표나 큰따옴표와 함께 추가할 수 없습니다. 왜냐하면 여기서 비교되는 것은 문자열 "undefine"이 아니라 undefed 데이터 유형이기 때문입니다.
7번째 글쓰기 방법
위의 쓰기 방식은 "정확한 비교"(===)의 경우에도 여전히 유효합니다.
if (myObj === undefine) {
var myObj = { } ;
}
8번째 작성 방법
자바스크립트의 언어 설계에 따르면 undefine == null이므로 myObj가 같은지 비교합니다. null로 변환하면 올바른 결과를 얻을 수도 있습니다.
if (myObj == null) {
var myObj = { };
}
그러나 실행 결과는 정확하지만 의미상으로는 이 판단은 방법이 잘못되었으므로 피해야 합니다. null은 null 값이 할당된 빈 개체, 즉 이 개체가 실제로 값을 갖는 개체를 참조하고, undefined는 존재하지 않거나 값이 할당되지 않은 개체를 참조하기 때문입니다. 따라서 여기서는 "비교 연산자"(==)만 사용할 수 있습니다. 여기서 "정확한 비교 연산자"(===)를 사용하면 오류가 발생합니다.
아홉 번째 작성 방법
in 연산자를 사용하여 myObj가 최상위 개체의 속성인지 확인할 수도 있습니다.
if (!('myObj' in window)) {
window.myObj = { };
}
열번째 작성 방법
마지막으로 hasOwnProperty 메소드를 사용하여 myObj가 상위의 속성인지 확인합니다. -레벨 객체:
if (!this. hasOwnProperty('myObj')) {
this.myObj = { };
}
요약
1. 객체가 존재하는지 여부만 판단하는 경우 다섯 번째 작성 방법을 사용하는 것이 좋습니다.
2. 객체 존재 여부 외에도 객체에 null 값이 있는지 확인해야 하는 경우 첫 번째 작성 방법을 사용하는 것이 좋습니다.
3. 특별한 사정이 없는 한 모든 변수는 var 명령어를 사용하여 선언해야 합니다.
4. 크로스 플랫폼을 위해서는 최상위 객체를 표현하기 위해 창을 사용하지 않는 것이 좋습니다.
5. Javascript 언어에서는 null과 정의되지 않음이 혼동되기 쉽습니다. 둘 다 관련될 수 있는 경우 "정확한 비교" 연산자(===)를 사용하는 것이 좋습니다.