js에서 검출 데이터 형식 총결산

2127 단어
다음과 같은 몇 가지 방법이 있는데, 앞의 세 가지는 비교적 자주 사용한다.세 번째가 제일 좋아요.
  • typeof
  • instanceof
  • Object.prototype.toString()
  • constructor
  • duck type

  • typeof


    typeof는 함수 대상과 기본 데이터 유형의 판단에 매우 적합하다
    typeof 100          //'number'
    typeof true         //'boolean'
    typeof function     //'function'
    typeof undefined    //'undefined'
    typeof null         //'object'
    typeof NaN          // 'number'
    typeof new Object() //'object'
    typeof new String("123")    //'object'
    

    instanceof


    주로 대상 데이터 유형을 판단하는 데 사용된다.object instance of Object, 왼쪽은 대상이어야 합니다. 그렇지 않으면false로 돌아갑니다.오른쪽은 함수 대상이나 함수 구조기여야 합니다. 그렇지 않으면 오류가 발생합니다.
    왼쪽 대상의 원형 체인에 오른쪽에 이 구조기가 있는지 판단하기;
    [1,2,3] instanceof Array //true
    new Object instanceof Array //false
    '123' instanceof String     //false
    new String('hi') instanceof String //true
    

    참고:
  • iframe와 윈도우를 뛰어넘는 것은 instanceof를 사용할 수 없습니다
  • null을 검출할 수 없습니다

  • Object.prototype.toString

    Object.prototype.toString.apply([]) === "[object Array]"
    Object.prototype.toString.apply(function(){}) === "[object Function]"
    Object.prototype.toString.apply(null) === "[object Null]"
    Object.prototype.toString.apply(undefined) === "[object undefined]"
    Object.prototype.toString.apply('HI') === "[object String]"
    

    null 문제를 처리할 수 있습니다.하지만 IE8 이하는 무효입니다.
    첨부: jQuery 아래 jQuery.type()의 구현:
    var class2type = {} ;
    "Boolean Number String Function Array Date RegExp Object Error".split(" ").forEach(function(e,i){
        class2type[ "[object " + e + "]" ] = e.toLowerCase();
    }) ;
    // IE ,forEach polyfill, 。
    function _typeof(obj){
        if ( obj == null ){
            return String( obj );
        }
        return typeof obj === "object" || typeof obj === "function" ?
            class2type[ class2type.toString.call(obj) ] || "object" :
            typeof obj;
    }
    
    

    좋은 웹페이지 즐겨찾기