【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)。
比较常用的判断方法是
{
return typeof val === "number";
}
但有些情况就不行。比如
var a;
document.write(isNumber(parseInt(a)));
这里打印出来的是true,但实际上变量a是NaN,它是不能用于数值运算的。
所以上面的函数可以修改为
{
return typeof val === "number" && isFinite(val);
}
isFinite() 函数是js自带的,它会过滤掉NaN和Infinity。
另外,判断变量是否是NaN,可以用isNaN(),它返回布尔值。
2.布尔型(boolean)、 字符串型(string) 和未定义(Undefined)。
这3个类型 比较简单,直接用
typeof val === ‘string’
typeof val === ‘undefined’
就可以了。
3.对象(Object)和 空值(Null)。
由于当变量是空值Null时,typeof也会返回object,所以Object不能直接用
typeof 判断。应该这样
{
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)