데이터 유형을 판단하는 몇 가지 방법

34262 단어
1. typeof, 되돌아오는 것은 모두 문자열typeof 판단 함수는function이고 판단 문자열은string이며 판단 대상, 수조,null는object로 되돌아온다.
  • typeof는 function의 유형을 판단할 수 있어 Object 유형을 제외한 대상을 판단할 때 편리하다.
  • console.log(typeof 1)   // "number"
    console.log(typeof 'dfjidf')  //  "string" 
    console.log(typeof true)   //  "boolean"
    console.log(typeof undefined)  //  "undefined"
    console.log(typeof window.hhhhhhh)  //  "undefined"
    
    console.log(typeof function(){}) // "function"
    console.log(typeof null)  // "object"
    console.log(typeof [])  //   "object"
    console.log(typeof {})  //  "object"
    console.log(typeof new Date())  //  "object"
    console.log(typeof new RegExp())  // "object"
    console.log(typeof new Error())  //  "object"
    
  • typeof와length를 결합하면 수조와 대상을 판단할 수 있으나 대상이length속성이 있고 값이number일 때 이 방법은 효력을 상실한다.
  • console.log(typeof []) 
    console.log(typeof [].length)   // "number"
    console.log(typeof {})
    console.log(typeof {}.length)  // "undefined"
    
  • typeof와length를 결합하여 수조와 대상이 무효임을 판단하는 경우:
  • console.log(typeof []) 
    console.log(typeof [].length)   // "number"
    console.log(typeof {})
    console.log(typeof {length:0}.length)  // "number"
    

    2. 대상 유형을 알고 있으면: instanceof를 사용할 수 있습니다
  • 배열은 Array의 인스턴스이자 Object의 인스턴스입니다.
  • null은 Object의 인스턴스가 아닙니다.
  • 직접 글자 양으로 정의된 문자열은String의 실례가 아니며,String 구조 함수를 통해 얻어진 문자열은String의 실례이다.
  • 주의: instanceof 뒤에 반드시 대상 유형(이니셜 대문자)이 있고 대소문자는 잘못 쓸 수 없습니다. 그렇지 않으면 잘못 보고합니다.
  • instanceof 방법은 대상이 직접 계승하든 간접 계승하든 모두true에 보고한다.
  • console.log( {} instanceof Object)   // true 
    
    console.log( [] instanceof Object)   // true
    console.log( [] instanceof Array)   // true
    
    console.log( 'fuifh' instanceof String)   // false
    console.log( new String('fuifh') instanceof String)   // true
    
    console.log( null instanceof Object) // false
    
    console.log( function () {} instanceof Function)  // true  
    console.log( new RegExp() instanceof RegExp)  // true
    console.log( new Date() instanceof Date)  // true
    
    
    // instanceof  true
    function Person () {
      
    }
    function Man () {
       
    }
    
    Man.prototype = new Person   // Man Person
    var p = new Man ()
    
    console.log(p.constructor === Man)   // false
    console.log(p.constructor === Person)  // true
    console.log(p instanceof Man)  // true
    console.log(p instanceof Person)  // true
    

    3. 대상의 constructor에 따라 판단: constructor
  • null에 constructor 속성이 없음
  • console.log( {}.constructor === Object)  // true
    console.log( [].constructor === Object)  // false
    console.log( [].constructor === Array)   // true
    console.log( 'fuifh'.constructor === String)  // true
    console.log( (new String('fuifh')).constructor === String)  // true   
    console.log( (function () {}).constructor === Function)  // true 
    console.log( (new RegExp()).constructor === RegExp)  // true
    console.log( (new Date()).constructor === Date)  // true
    console.log( null.constructor === Object)  //  ,null constructor 
    
  • 주의: constructor가 클래스 계승 중 오류 발생
  • function Person () {
      
    }
    function Man () {
       
    }
    var p = new Man ()
    
    console.log(p.constructor === Man)   // true
    console.log(p.constructor === Person)  // false
    console.log(p instanceof Man)  // true
    console.log(p instanceof Person)  // false
    
    function Person () {
      
    }
    function Man () {
       
    }
    
    Man.prototype = new Person   // Man Person
    var p = new Man ()
    
    console.log(p.constructor === Man)   // false
    console.log(p.constructor === Person)  // true
    console.log(p instanceof Man)  // true
    console.log(p instanceof Person)  // true
    

    construtor의 문제를 해결하는 것은 일반적으로 대상의 constructor가 수동으로 자신을 가리키도록 하는 것이다.
    function Person () {
      
    }
    function Man () {
       
    }
    
    Man.prototype = new Person
    var p = new Man ()
    p.constructor = Man   //  Man, constructor 
    
    console.log(p.constructor === Man)  //true  
    console.log(p.constructor === Person)   //false
    console.log(p instanceof Man)   // true
    console.log(p instanceof Person)   // true
    

    4.prototype과call/apply를 결합하여 사용하면 예에서의call을 apply로 바꿀 수 있다
    console.log(Object.prototype.toString.call('fhakfk') === "[object String]")   // true
    console.log(Object.prototype.toString.call([1,432,564]) === "[object Array]")   // true
    console.log(Object.prototype.toString.call({}) === "[object Object]")   // true
    console.log(Object.prototype.toString.call(undefined))   //  "[object Undefined]"
    console.log(Object.prototype.toString.call(null))   //  "[object Null]"
    console.log(Object.prototype.toString.call(new Date()))  // "[object Date]" 
    console.log(Object.prototype.toString.call(function () {}))  //  "[object Function]"
    console.log(Object.prototype.toString.call(true))  //  "[object Boolean]"
    

    5、jQuery.type() 또는 $.type()
  • undefined 또는null이면 해당하는 "undefined"또는null"을 되돌려줍니다.
  • jQuery.type( null ) === "null"
    jQuery.type( undefined ) === "undefined"
    jQuery.type() === "undefined"
    jQuery.type( window.hhhhhh) === "undefined"
    jQuery.type( true ) === "boolean"
    jQuery.type( 3 ) === "number"
    jQuery.type( "jfdsfi" ) === "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"
    
  • 다른 모든 것은 형식'object'로 돌아갑니다.
  • 좋은 웹페이지 즐겨찾기