JavaScript的类型检测

本文介绍了JavaScript中几种常见的类型检测方法,包括typeof、instanceof运算符及对象的constructor属性等,并提供了一个实用函数arraysSimilar来判断两个数组是否类型相似。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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(arr1arr2){
    // 
          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;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值