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 중국어 웹사이트에 주목하세요!