1. 기능 :
연산자 유형은 표현식의 데이터 유형을 나타내는 문자열을 반환합니다.
가능한 문자열은 "번호", "문자열", "부울", "개체", "함수"및 "정의되지 않은"입니다.
2. 일반적으로 사용되는 반환 값에 대한 설명
| 표현 | 반환 값 |
| 정의되지 않은 타입 | '한정되지 않은' |
| 널 타입 | '물체' |
| 참 타입 | '부울' |
| 유형 123 | '숫자' |
| "ABC"유형 | '끈' |
| typeof function () {} | '기능' |
| 유형 {} | '물체' |
| 유형 [] | '물체' |
| 알 수없는 유형 | '한정되지 않은' |
참고 : 유형의 반환 값은 모두 문자열이며 모두 소문자 헤더입니다.
3. 정기적 인 응용 프로그램 :
1). 변수가 존재하고 값이 있는지 확인하십시오.
Typeof는 두 경우에서 "정의되지 않은"을 반환합니다. 변수가 선언되지 않고 변수의 값이 정의되지 않은 경우. 예를 들어:
> 비정상적 인 유형 === "정의되지 않은"true
> var 선언 평가;
> 선언문 유형 'undefined'
> 정의되지 않은 '정의되지 않은'타입
값이 정의되지 않은지 여부를 감지하는 다른 방법이 있습니다.
> var value = 정의되지 않은;
> value === 정의되지 않은 참
그러나이 방법이 선언되지 않은 변수에서 사용되는 경우, 유형만이 오류를보고하지 않고 선언되지 않은 변수를 정상적으로 감지 할 수 있기 때문에 예외가 발생됩니다.
> UndeclaredVariable === 정의되지 않은 참조 기러기 : 비정상적인 참조는 정의되지 않았습니다
참고 : 무시되지 않은 변수, 매개 변수로 전달되지 않은 공식 매개 변수 및 존재하지 않는 속성에는 위의 문제가 항상 없습니다. 항상 액세스 할 수 있고 값은 항상 정의되지 않기 때문입니다.
> var 선언 평가;
> deplaredvariable === 정의되지 않은 참
> (function (x) {return x === undefined} ()) true
> ({}). foo === 정의되지 않은 참
참고 : 따라서 if (window.MayBeunDeClaredVariable) {}
질문 : 이러한 작업을 완료 할 때 Typeof는 복잡해 보입니다.
솔루션 : 이런 종류의 작업은 일반적이지 않으므로 일부 사람들은 더 나은 솔루션을 찾을 필요가 없다고 생각합니다. 그러나 누군가가 특수 운영자를 제안 할 수 있습니다.
> 정의되지 않은 명확성 평가 허위
> var 선언 평가;
> 정의 된 DecleRvariable False
또는 누군가가 변수가 선언되는지 여부를 감지하는 연산자가 필요할 수도 있습니다.
> 선언되지 않은 범위가 거짓으로 선언되었습니다
> var 선언 평가;
> 선언 선언 선언 진실
번역기 주 : Perl에서 위의 정의 된 연산자는 정의 된 ()와 동일하며 위의 선언 된 연산자는 존재하는 것과 같습니다 ()
2. 값이 정의되지 않은 것과 같지 않으며 null과 같지 않다고 결정하십시오.
질문 : 값이 정의되었는지 여부를 감지하려면 (값이 정의되지 않았는지 또는 무효가되지 않음), 유형의 이상한 표현 (버그로 간주 됨) : NULL 유형 "Object": "객체":
> NULL 'Object'타입
참고 : 원래 JavaScript 구현에서만 버그라고 할 수 있으며 표준은 이제 표준화되었습니다. v8은 한 번 수정 및 구현 된 유형의 null === "null"이지만 마침내 불가능한 것으로 판명되었습니다. http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
솔루션 : Typeof를 사용 하여이 작업을 수행하지 마십시오. 대신 다음 방법을 사용하십시오. 그러나 변수 X를 미리 선언해야합니다. 그렇지 않으면 오류 가보고됩니다.
함수 isdefined (x) {return x! == null && x! == 정의되지 않은; }
또 다른 가능성은 "기본 가치 연산자"를 소개하는 것입니다. MyValue가 정의되지 않으면 다음 표현식은 defaultValue를 반환합니다.
MyValue || DefaultValue
위의 표현은 다음과 같습니다.
(myValue! == undefined && myValue! == null)? MyValue : DefaultValue
실제로, 그것은 다음 진술의 단순화입니다.
myValue = myValue || DefaultValue
3. 객체 값과 원래 값을 구별합니다
다음 함수는 X가 객체 값인지 여부를 감지하는 데 사용됩니다.
function isobject (x) {return (typeof x === "function"|| (typeof x === "Object"&& x! == null); }
문제 : 위의 감지는 기능과 객체를 다른 유형으로 처리하고 NULL 유형의 "객체"를 반환하기 때문에 위의 감지가 더 복잡합니다.
솔루션 : 다음 방법은 종종 객체 값을 감지하는 데 사용됩니다.
함수 isobject2 (x) {return x === 객체 (x); }
경고 : 객체의 인스턴스는 여기에서이를 감지하는 데 사용될 수 있다고 생각할 수 있지만 인스턴스는 객체를 사용하여 프로토 타입을 사용하여 인스턴스 관계를 판단하는 데 사용됩니다. 프로토 타입이없는 객체가 있으면 어떻게해야합니까?
> var obj = object.create (null);
> object.getPrototype (obj) null
OBJ는 실제로 객체이지만 값의 인스턴스는 아닙니다.
> OBJ 'Object'타입
> OBJ 인스턴스의 Object False
실제로, 당신은 그러한 대상을 거의 만나지 않을 수도 있지만, 존재하고 그 목적을 가지고 있습니다.
Translator 's Note : Object.Prototype은 기본적으로 존재하며 프로토 타입이없는 객체입니다.
> Object.getPrototype (Object.Prototype) NULL
> Object.Prototype 'Object'타입
> Object.prototype 인스턴스의 객체 false
4. 원래 값의 유형은 무엇입니까?
Typeof는 특정 원래 값의 유형을 보는 가장 좋은 방법입니다.
> "ABC" 'String'유형
> 정의되지 않은 '정의되지 않은'타입
질문 : Null 유형의 이상한 행동을 알아야합니다.
> null 타입 // 조심하세요! '물체'
솔루션 : 다음 기능은이 문제를 해결할 수 있습니다 (이 사용 사례에 대해서만).
함수 getPrimitiveTyPename (x) {
var typename = typeof x;
스위치 (typeName) {
사례 "undefined": case "boolean": case "number": case "string": return typeName;
사례 "객체": if (x === null) {return "null"; }
기본값 : // 이전 판단은 새로운 TypeError를 던지지 못했습니다 ( "매개 변수는 원시적 값이 아닙니다 :"+x);
}}
더 나은 솔루션 : gettypename () 함수를 구현하여 원래 값의 유형을 반환 할 수있을뿐만 아니라 객체 값의 내부 [[class]] 속성을 반환합니다. 여기서 우리는이 기능을 구현하는 방법에 대해 이야기합니다 (번역기 주 : $ .Type in jQuery는 이와 같은 구현입니다).
5. 값이 함수인지 여부
타입은 값이 함수인지 여부를 감지하는 데 사용될 수 있습니다.
> typeof function () {} 'function'
> Object.Prototype.tostring 'function'타입
원칙적으로 함수의 인스턴스는 이러한 종류의 요구 사항 감지를 수행 할 수 있습니다. 언뜻보기에 글은 더 우아한 것 같습니다. 그러나 브라우저에는 기발한 것이 있습니다. 각 프레임 워크와 창에는 고유 한 글로벌 변수가 있습니다. 따라서 특정 프레임 워크의 객체를 다른 프레임 워크로 전달하면 두 프레임 워크가 다른 생성자를 가지기 때문에 인스턴스는 제대로 작동하지 않습니다. 이것이 ecmascript5에 array.isarray () 메소드가있는 이유입니다. 객체가 주어진 생성자의 인스턴스인지 확인하기 위해 프레임 워크를 가로 지르는 메소드가 있으면 좋을 것입니다. 위의 gettypename ()은 해결 방법이지만 더 근본적인 솔루션이있을 수 있습니다.
6. 개요
언급 된 것은 현재 JavaScript에서 가장 시급한 요구가되어야하며, 현재 유형의 현재 책임의 기능적 특징을 대체 할 수 있습니다.
isdefined () (예 : object.isdefined ()) : 함수 또는 연산자로 사용할 수 있습니다.
isobject ()
gettypename ()
객체가 프레임 워크에서 지정된 생성자의 인스턴스인지 여부를 감지 할 수있는 메커니즘
이러한 요구 사항에 대해 변수가 선언되었는지 확인하려면 자체 연산자가 필요하지 않을 수 있습니다.
JS에서 Typeof 사용에 대한 위의 요약은 편집기가 공유하는 전체 내용입니다. 나는 그것이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.