JavaScript的类型检测

    xiaoxiao2021-11-07  66

    JavaScript检测类型的方法:typeof,instanceof运算符,对象的constructor属性,跨原型链调用toString()方法。      1.typeof方法           可判断“string”,“number”,“object”,“function”,“boolean”,“undefined”(可用于判断变量是否存在),可是其能力有限的,对于于数组,日期,正则类型只能返回object。      2.instanceof运算符            其要求左边的左边的运算数是一个对象,右边的运算数是是对象类的名字或是构造函数 。如果左边对象是其对象类或是构造函数的实例,则返回true,若不是,则返回false。   [ ]  instanceof  Array ;  // true new  date  instanceof  Date ;  //true [ ]  instanceof  RegExp ; //false       3.对象的constructor属性           每一个对象都有一个construtor属性,这个属性引用了初始化该类型的构造函数,常用于判断位置对象的类型(前提是该类型需是对象),用typeog方法判断该类型是否是对象,然后利用constructor方法。   //   founction  isArray ( arr ) {      return  typeof  arr == "object" &&  arr . constructor  ==  Array ; }       通常可以用第二个和第三个方法检测数组对象类型,但是在检测跨框架(cross-frame)的页面中的数组时,会失败。原因就是在不同框架中创建的数组不会共享prototype属性,随后新出现了一种准确的检测方法:Object.prototype.Tostring()可以解决上面的跨框架问题。   //  function  isArray ( arr ) {      return  Object . protoytpe . toString . call ( arr )  ===  "[object Array]" ; }        

    编写arraysSimilar函数,实现判断传入的两个数组是否相似。具体需求:

    1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。

    2. 数组的长度一致。

    3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.

      //  function  arraysSimilar ( arr1 arr2 ) {      //              if ( ! ( arr1  instanceof  Array )  ||  ! ( arr2  instanceof  Array )) {                  return  false ;             }          //                if ( arr1 . length != arr2 . length ) {                  return  false ;                 }          //                function  type_element ( ele ) {                  if ( ele === null ) {                       return  "null" ;                  }                  else  if ( ele === window ) {                       return  "window" ;                  }                  else  if ( ele  instanceof  Date ) {                       return  "Date" ;                  }                  else  if ( ele  instanceof  Array ) {                       return  "Array" ;                  }                  else  return  typeof ( ele ) ;             }             var  e_arr1 = [ ] ;             var  e_arr2 = [ ] ;             for ( var  i = 0 ; i < arr1 . length ; i ++ ) {                  e_arr1 . push ( type_element ( arr1 [ i ])) ;                  e_arr2 . push ( type_element ( arr2 [ i ])) ;             }             var  a1 = e_arr1 . sort ( ) ;             var  a2 = e_arr2 . sort ( ) ;             for ( var  i = 0 ; i < arr1 . length ; i ++ ) {                  if  ( a1 [ i ] != a2 [ i ]) {                       return  false ;                  }             }             return  true ;          }
    转载请注明原文地址: https://ju.6miu.com/read-678075.html

    最新回复(0)