>웹 프론트엔드 >JS 튜토리얼 >js에서 데이터 유형을 결정하는 여러 가지 방법

js에서 데이터 유형을 결정하는 여러 가지 방법

高洛峰
高洛峰원래의
2017-01-14 10:24:421408검색

js에는 데이터 유형을 결정하는 여러 가지 방법이 있습니다: typeof, 인스턴스of, 생성자, 프로토타입, $.type()/jquery.type() 다음으로 이러한 방법의 유사점과 차이점을 주로 비교해 보겠습니다.

몇 가지 예를 들어보겠습니다.

var a = "iamstring.";
var b = 222;
var c= [1,2,3];
var d = new Date();
var e = function(){alert(111);};
var f = function(){this.name="22";};  

1. 가장 일반적인 판단 방법: typeof

alert(typeof a)  ------------> string
alert(typeof b)  ------------> number
alert(typeof c)  ------------> object
alert(typeof d)  ------------> object
alert(typeof e)  ------------> function
alert(typeof f)  ------------> function

여기서 typeof는 반환됩니다. 유형은 모두 문자열 형식입니다. 예를 들면 다음과 같습니다.

alert(typeof a == "string") -------------> true
alert(typeof a == String) ---------------> false

또한 typeof는 함수 유형을 더 많이 결정할 수 있습니다. 객체 유형 이외의 객체를 결정할 때 편리합니다.

2. 알려진 객체 유형을 확인하는 방법: 인스턴스of

alert(c instanceof Array) ---------------> true
alert(d instanceof Date)
alert(f instanceof Function) ------------> true
alert(f instanceof function) ------------> false

참고: 인스턴스오브 뒤에는 객체 유형과 크기가 와야 합니다. 이 방법은 일부 조건부 선택이나 분기에 적합합니다.

3. 객체의 생성자를 기준으로 판단: constructor

alert(c.constructor === Array) ----------> 경고(d .constructor === 날짜) -----------> true
alert(e.constructor === 함수) ------->
참고: 클래스를 상속할 때 생성자는 오류를 발생시킵니다.

예:

function A(){};
function B(){};
A.prototype = new B(); //A继承自B
var aObj = new A();
alert(aobj.constructor === B) -----------> true;
alert(aobj.constructor === A) -----------> false;

이 문제는 직접 상속과 간접 상속 모두에서 발생하지 않습니다. of 객체는 true를 보고합니다:

alert(aobj instanceof B) ----------------> true;
alert(aobj instanceof B) ----------------> true;

주제로 돌아가서 생성자의 문제를 해결하려면 일반적으로 객체의 생성자가 수동으로 자신을 가리키도록 하는 것입니다.

aobj.constructor = A; //将自己的类赋值给对象的constructor属性
alert(aobj.constructor === A) -----------> true;
alert(aobj.constructor === B) -----------> false; //基类不会报true了;

4. 흔하지만 번거로운 방법 : 프로토타입

alert(Object.prototype.toString.call(a) === ‘[object String]') -------> true;
alert(Object.prototype.toString.call(b) === ‘[object Number]') -------> true;
alert(Object.prototype.toString.call(c) === ‘[object Array]') -------> true;
alert(Object.prototype.toString.call(d) === ‘[object Date]') -------> true;
alert(Object.prototype.toString.call(e) === ‘[object Function]') -------> true;
alert(Object.prototype.toString.call(f) === ‘[object Function]') -------> true;

대소문자를 틀리게 쓸 수 없어서 더 번거롭지만 더 다양합니다.

5. 무적이며 전능한 메서드: jquery.type()

객체가 정의되지 않았거나 null인 경우 해당 "정의되지 않음" 또는 "null"을 반환합니다.

jQuery.type( undefined ) === "undefined"
jQuery.type() === "undefined"
jQuery.type( window.notDefined ) === "undefined"
jQuery.type( null ) === "null"

객체에 브라우저 내장 객체의 [[클래스]]와 동일한 내부 [[클래스]]가 있는 경우 해당 [[클래스]]를 반환합니다. 이름. (이 기술에 대한 자세한 내용. )

jQuery.type( true ) === "boolean"
jQuery.type( 3 ) === "number"
jQuery.type( "test" ) === "string"
jQuery.type( function(){} ) === "function"
jQuery.type( [] ) === "array"
jQuery.type( new Date() ) === "date"
jQuery.type( new Error() ) === "error" // as of jQuery 1.9
jQuery.type( /test/ ) === "regexp"

다른 모든 항목은 "객체" 유형을 반환합니다.

보통은 typeof를 사용하여 판단합니다. Object 유형이 알려진 상황에서는 선택의 여지가 없는 경우 $.type() 메소드를 사용하면 됩니다. .

위 내용은 이 글의 전체 내용입니다. 이 글의 내용이 모든 분들의 공부나 업무에 조금이나마 도움이 되었으면 좋겠습니다. 저도 PHP 중국어 홈페이지에 지원하고 싶습니다!

데이터 유형을 결정하는 여러 가지 방법에 대한 더 많은 js 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.