[javascript学习指南]javascript中数据类型的判断详解

更新时间:2018-02-18    来源:js教程    手机版     字体:

【www.bbyears.com--js教程】

先来看一个我面试的题


上周面试的时候,考官问我 js如何判断一个变量的数据类型是数组,js中的typeof是不能区分 Array 和 Object 的,这是js的一个问题。也就是说:

typeof [] == "object"; //true判断数组的方法如下:(太长换行,大家将就看)

 代码如下

if(a&&typeof a == "object"&&typeof a.length == "number"&&
!a.propertyIsEnumerable("length")))
{
    alert("a是数组");
}

好了不知道大家看懂了,没看懂接着下看。

一、JS中有哪些数据类型。

1.数值型(Number)。包括整数、浮点数。
2.布尔型(Boolean)。
3.字符串型(String)。
4.对象(Object)。
5.数组(Array)。
6.空值(Null)。
7.未定义(Undefined)。

二、判断一个变量属于什么数据类型。

1.数值型(number)。
比较常用的判断方法是

 代码如下 function isNumber(val)
{
     return typeof val === "number";
}

但有些情况就不行。比如

var a;
document.write(isNumber(parseInt(a)));
这里打印出来的是true,但实际上变量a是NaN,它是不能用于数值运算的。
所以上面的函数可以修改为

 代码如下 function isNumber(val)
{
     return typeof val === "number" && isFinite(val);
}

isFinite() 函数是js自带的,它会过滤掉NaN和Infinity。
另外,判断变量是否是NaN,可以用isNaN(),它返回布尔值。

2.布尔型(boolean)、 字符串型(string) 和未定义(Undefined)。
这3个类型 比较简单,直接用

 代码如下 typeof val === ‘boolean’
typeof val === ‘string’
typeof val === ‘undefined’

就可以了。

3.对象(Object)和 空值(Null)。
由于当变量是空值Null时,typeof也会返回object,所以Object不能直接用
typeof 判断。应该这样

 代码如下 function isObj(str)
{
 if(str === null || typeof str === "undefined")
 {
     return false;
 }
 return typeof str === "object";
}

判断空值用 val === null 即可。注意要用全等。
4.数组(Array)。
数组类型不可用typeof来判断。因为当变量是数组类型是,typeof会返回object。
这里有两种方法判断数组类型。

 代码如下

function isArray(arr)
{
 return Object.prototype.toString.apply(arr) === "[object Array]";
}
//或
function isArray(arr)
{
 return arr.constructor === Array;
}


下面再分享一些常用的验证数据类型的函数

 代码如下

**********************一。验证类*****************************/
 //对象是否存在
 function isObj(str)
 {
  if(str==null||typeof(str)=="undefined")
   return false;
  return true;
 }
 //去除字符串中的空格
 function strTrim(str)
 {
  if(!isObj(str))
   return "undefined";
  str=str.replace(/^/s+|/s+$/g,"");
  return str;
 }
/**********************1数字验证******************************/
//1。1整数
 //整数或者为空
 function isIntOrNull(str){
  if(!isObj(str))//判断对象是否存在
   return "undefined";
  return isNull(str)||isInt(str);
 }
 //必需是整数
 function isInt(str){
  var reg = /^(-|/+)?/d+$/ ;
  return reg.test(str);
 }
//1.2小数
 //小数或者为空
 function isFloatOrNull(str){
  if(!isObj(str))//判断对象是否存在
   return "undefined";
  if(isInt(str))
   return true;
  return isNull(str)||isFloat(str);
 }
 //必需是小数
 function isFloat(str){
  if(isInt(str))
   return true;
  var reg = /^(-|/+)?/d+/./d*$/;
  return reg.test(str);
 }
//1.3数字大小判断
 //数i不能大于数y
 function iMinY(i , y){
  if(!isObj(i)||!isObj(y))//判断对象是否存在
   return "undefined";
  if(!(isFloat(i)&&isFloat(y)))
   return "比较的必须是数字类型"
  if(i<=y)
   return true;
  return false;
 }
 //数i不能小于数y
 function iMaxY(i , y){
  if(!isObj(i)||!isObj(y))//判断对象是否存在
   return "undefined";
  if(!(isFloat(i)&&isFloat(y)))
   return "比较的必须是数字类型"
  if(i>=y)
   return true;
  return false;
 }
/**********************1数字验证******************************/

/**********************2时间类验证******************************/
//2.1 短时间,形如 (13:04:06)
 function shortTimeCheck(str)
 {
  if(!isObj(str))//判断对象是否存在
   return "undefined";
  var a = str.match(/^(/d{1,2})(:)?(/d{1,2})/2(/d{1,2})$/);
  //var a = str.match(/^/d{1,2}:/d{1,2}:/d{1,2}$/);
        if (a == null)
  {
   alert("输入的参数不是时间格式");
   return false;
  }
        if (a[1]>24 || a[3]>60 || a[4]>60)
        {
   alert("时间格式不对");
   return false
        }
        return true;
 }
//2.2 短日期,形如 (2003-12-05)
 function shorDateCheck(str)
 {
  var r = str.match(/^(/d{1,4})(-|//)(/d{1,2})/2(/d{1,2})$/); 
  if(r==null)
   return false; 
  var d= new Date(r[1], r[3]-1, r[4]); 
  return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
 }
//2.3 长时间,形如 (2003-12-05 13:04:06)
 function longDateCheck(str)
 {
  var reg = /^(/d{1,4})(-|//)(/d{1,2})/2(/d{1,2}) (/d{1,2}):(/d{1,2}):(/d{1,2})$/; 
        var r = str.match(reg); 
        if(r==null)
   return false; 
        var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]); 
        return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]);
 }
//2.4 只有年和月。形如(2003-05,或者2003-5)
//2.5 只有小时和分钟,形如(12:03)

本文来源:http://www.bbyears.com/wangyezhizuo/39349.html