网站地图    收藏   

主页 > 前端 > javascript >

javascript中数据类型的判断详解

来源:自学PHP网    时间:2014-09-19 14:47 作者: 阅读:

[导读] 在js中数据类型有N种,这里我们来介绍常用的数据类型判断方法,这里包括有:数值型(Number)。包括整数、浮点数、布尔型、字符串型、数组、空值、Undefined等等...

先来看一个我面试的题


上周面试的时候,考官问我 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)

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论