>  기사  >  웹 프론트엔드  >  javascript_javascript 기술의 데이터 유형 감지에 대한 간략한 토론

javascript_javascript 기술의 데이터 유형 감지에 대한 간략한 토론

WBOY
WBOY원래의
2016-05-16 18:23:231102검색
1. 자바스크립트 데이터
자바스크립트 데이터는 단순 데이터와 복합 데이터의 두 가지 유형으로 나뉩니다. 단순 데이터에는 숫자, 문자열, 부울, 정의되지 않음 및 null의 다섯 가지 유형이 있습니다. 복합 데이터에는 객체라는 한 가지 유형만 있습니다. [여기 Li Zhan 선생님 덕분에 <> 표현력이 풍부하고 인상적입니다.]

2. JavaScript 데이터 유형 감지
1.
먼저 typeof를 통해 간단한 데이터 유형을 얻는 방법을 테스트해 보겠습니다. 아무 말도 하지 마세요. 코드가 왕입니다.
코드 복사 코드는 다음과 같습니다.

/ / 변수 obj의 데이터 유형을 가져옵니다.
function getType(obj) {
return typeof(obj)
}
/*상수 가져오기 유형*/
alert(getType) (1)); //숫자
alert(getType("jeff wong")); //string
alert(getType(true)) //boolean
alert(getType(undefine)); //정의되지 않음
alert(getType(null)); //객체
/*변수 가져오기 유형*/
var num = 1; var str = "jeff wong"
var 플래그 = true;
var hell = 정의되지 않음;
var none = null
alert(getType(num)); //숫자
alert(getType(str)) //string >alert(getType( 플래그)); //부울
alert(getType(hell)); //정의되지 않음
alert(getType(none)) //객체


그런 식으로 typeof 연산자를 통해 처음 4개의 단순 데이터 유형이 완전히 예상되지만 typeof null이 객체를 반환하는 것을 볼 수 있습니다. null은 null 타입의 유일한 값이지만 null은 객체가 아니고, null 값을 갖는 변수는 객체가 아니기 때문에 typeof를 통해 직접적으로 null 타입을 얻을 수 없다는 점에 유의해야 합니다. 간단한 데이터 유형을 올바르게 얻으려면 getType에 몇 가지 개선 사항을 추가하기만 하면 됩니다.


function getType(obj) {
return (obj === null) ? "null" : typeof (obj)
}


다음에 시도해 보겠습니다. 데이터 유형 객체:


function Cat() {
}
Cat.prototype.CatchMouse = function () {
//do some thing
}
// 변수 obj의 데이터 유형 가져오기
function getType(obj) {
return (obj === null) ? "null" : typeof (obj)
var obj = new Object()
alert(getType(obj));
var func = new Function();
alert(getType(func)); //함수
var str = new String("jeff wong")
alert(getType(str)) ; // 객체
var num = new Number(10);
alert(getType(num)); //객체
var time = new Date()
alert(getType(time) ); / /객체
var arr = new Array();
alert(getType(arr)); //객체
var reg = new RegExp()
alert(getType(reg) ); / /object
var garfield = new Cat();
alert(getType(garfield)); //object


Function만 제외하면 됩니다. Object, String, Date 등과 같은 JavaScript의 공통 내장 객체이든 사용자 정의 함수이든 관계없이 typeof에 의해 반환되는 모든 객체는 예외 없이 모두 객체입니다. 그러나 사용자 정의 함수의 경우 "진짜 얼굴"(예: 객체가 아닌 Cat)을 얻는 것을 선호하며 분명히 typeof에는 이러한 변환 처리 기능이 없습니다.
2. 생성자님, 사랑한다고 크게 말하고 싶어요
유니버셜 타입of는 가끔 해결책이 없는데, 변수가 커스텀 함수 인스턴스인지 어떻게 판단하나요? JavaScript의 모든 객체에는 생성자 속성이 있다는 것을 알고 있습니다. 이 속성은 특히 사용자 정의 함수의 경우 객체 데이터 유형을 결정하는 데 도움이 될 수 있습니다.



코드 복사 코드는 다음과 같습니다. var obj = "jeff wong";
alert(obj.constructor == String) //true
obj = new Cat ();
alert(obj.constructor == Cat); //true


그러나 다음 코드를 사용하여 테스트할 수도 있습니다.


코드 복사 코드는 다음과 같습니다.

//alert(1.constructor); //숫자 상수 오류 숫자 상수에 생성자가 없습니다.
var num = 1
alert(num.constructor == Number); 🎜 >alert("jeff wong".constructor == String); //true
var str = "jeff wong"
alert(str.constructor == String) //true
var obj = null;
alert(obj.constructor); //null에는 생성자 속성이 없습니다
none = undefine; //undefine에는 생성자 속성이 없습니다


실험에 따르면 숫자 상수, null 및 정의되지 않음에는 생성자 속성이 없는 것으로 나타났습니다.
이 시점에서 루주처럼 행복해하며 이제 끝났다고 생각하시겠습니까? 다음 코드도 영감과 발굴이 될 수 있습니다.


function Animal() {
}
function Cat() {
}
Cat.prototype = new Animal()
Cat.prototype.CatchMouse = function() {
/ /어떤 일을 하세요
}
var obj = new Cat()
alert(obj.constructor == Cat); ?
alert(obj.constructor == Animal); //진정한 이해


프로토타입 체인 상속의 경우 생성자는 사용하기가 그리 쉽지 않은 것으로 나타났습니다. 무엇을 해야 할까요?
3. 직관적인 인스턴스 오브
야, 인스턴스 오브가 웅장하게 등장한다. 네이밍으로 보면 특정 객체의 인스턴스를 얻는 것 같은데, 이게 맞는 표현인지는 모르겠습니다. 아무튼 위의 코드를 개선해서 먼저 테스트해 보겠습니다.


function Animal() {
}
function Cat() {
}
Cat.prototype = new Animal()
Cat.prototype.CatchMouse = function() {
//어떤 일을 하세요
}
var garfield = new Cat();
alert(garfield instanceof Cat) //사실입니다
alert(garfield instanceof Animal); true 이해할 수 있습니다


자바스크립트의 데이터 유형 감지에 관해 Louzhu가 여기에 요약했습니다. 마음이 있는 사람이 더 추가할 수 있기를 바랍니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.