本文详细总结JavaScript中七种数据类型的判断方法。针对Number类型,指出typeof的局限性并引入isFinite函数;分别介绍Boolean、String、Undefined的基础判断;重点解析Object、Null及Array类型的特殊处理,包括利用Object.prototype.toString判断数组,确保代码安全准确。
近期开发中涉及JavaScript数据类型判断的需求,经过查阅资料与实测验证,整理出以下安全可靠的判断方案,供开发者参考。
JavaScript数据类型分类
一、JavaScript中的数据类型分类
1. 数值型(Number):涵盖整数与浮点数。
2. 布尔型(Boolean)
3. 字符串型(String)
4. 对象(Object)
5. 数组(Array)
6. 空值(Null)
7. 未定义(Undefined)
变量数据类型判断方法
二、变量数据类型的判断方法
数值型(Number)判断
1. 数值型(Number)
常规做法是使用typeof运算符:
function isNumber(val){
return typeof val === 'number';
}
但该方法存在缺陷,例如:
var a;
alert(isNumber(parseInt(a)));
执行上述代码会弹出true,如图所示:

然而变量a实际值为NaN,它无法参与数值运算。
因此,判断函数应优化为:
function isNumber(val){
return typeof val === 'number' && isFinite(val);
}
优化后执行结果变为false,如图所示:

补充说明JavaScript的isFinite()函数,该函数用于检测参数是否为有限数值。若参数为有限数字(或可转换为有限数字),返回true;若为NaN、正无穷大或负无穷大,则返回false。
布尔型(Boolean)判断
2. 布尔型(Boolean)
布尔类型的判断较为直接,可采用以下方式:
/*
判断变量val是不是布尔类型
*/
function isBooleanType(val) {
return typeof val ==="boolean";
}
测试代码:
<script type="text/javascript">
/*
判断变量val是不是布尔类型
*/
function isBooleanType(val) {
return typeof val ==="boolean";
}
var a;
var b = false;
alert("变量a是布尔类型的判断结果是:"+isBooleanType(a));
alert("变量b是布尔类型的判断结果是:"+isBooleanType(b));
</script>
运行结果:

字符串(String)判断
3. 字符串(String)
字符串类型的判断同样简单,方法如下:
/*
判断变量是不是字符串类型
*/
function isStringType(val) {
return typeof val === "string";
}
测试代码:
<script type="text/javascript">
/*
判断变量是不是字符串类型
*/
function isStringType(val) {
return typeof val === "string";
}
var a;
var s = "strType";
alert("变量a是字符串类型的判断结果是:"+isStringType(a));
alert("变量s是字符串类型的判断结果是:"+isStringType(s));
</script>
运行结果:

未定义(Undefined)判断
4. 未定义(Undefined)
未定义类型的判断方式如下:
/*
判断变量是不是Undefined
*/
function isUndefined(val) {
return typeof val === "undefined";
}
测试代码:
<script type="text/javascript">
var a;//a是undefined
var s = "strType";
/*
判断变量是不是Undefined
*/
function isUndefined(val) {
return typeof val === "undefined";
}
alert("变量a是Undefined的判断结果是:"+isUndefined(a));
alert("变量s是Undefined的判断结果是:"+isUndefined(s));
</script>
运行结果:

对象(Object)判断
5. 对象(Object)
由于当变量为Null时,typeof同样返回object,因此不能仅靠typeof直接判断Object。
正确的判断逻辑如下:
function isObj(str){
if(str === null || typeof str === 'undefined'){
return false;
}
return typeof str === 'object';
}
测试代码:
<script type="text/javascript">
/*
判断变量是不是Object类型
*/
function isObj(str){
if(str === null || typeof str === 'undefined'){
return false;
}
return typeof str === 'object';
}
var a;
var b = null;
var c = "str";
var d = {};
var e = new Object();
alert("b的值是null,typeof b ==='object'的判断结果是:"+(typeof b ==='object'));
alert("变量a是Object类型的判断结果是:"+isObj(a));//false
alert("变量b是Object类型的判断结果是:"+isObj(b));//false
alert("变量c是Object类型的判断结果是:"+isObj(c));//false
alert("变量d是Object类型的判断结果是:"+isObj(d));//true
alert("变量e是Object类型的判断结果是:"+isObj(e));//true
</script>
运行结果:

空值(Null)判断
6. 空值(Null)
判断空值可直接使用 val === null。
function isNull(val){
return val === null;
}
测试代码:
/*
判断变量是不是null
*/
function isNull(val){
return val === null;
}
/*测试变量*/
var a;
var b = null;
var c = "str";
//弹出运行结果
alert("变量a是null的判断结果是:"+isNull(a));//false
alert("变量b是null类型的判断结果是:"+isNull(b));//true
alert("变量c是null类型的判断结果是:"+isNull(c));//false
运行结果:

数组(Array)判断
7. 数组(Array)
数组类型无法使用typeof判断,因为typeof对数组返回object。
此处提供两种判断数组的方法:
/*判断变量arr是不是数组
方法一
*/
function isArray(arr) {
return Object.prototype.toString.apply(arr) === '[object Array]';
}
/*判断变量arr是不是数组
方法二
*/
function isArray(arr) {
if(arr === null || typeof arr === 'undefined'){
return false;
}
return arr.constructor === Array;
}
测试代码:
<script type="text/javascript">
/*判断变量arr是不是数组
方法一
*/
function isArray(arr) {
return Object.prototype.toString.apply(arr) === '[object Array]';
}
/*判断变量arr是不是数组
方法二
*/
function isArray(arr) {
if(arr === null || typeof arr === 'undefined'){
return false;
}
return arr.constructor === Array;
}
//测试变量
var a = null;
var b = "";
var c ;
var arr = [,,];
var arr = new Array();
//打印测试结果
document.write("arr变量是数组类型,typeof arr === 'object'的结果是:"+(typeof arr === 'object'));
document.write("<br/>");
document.write("------------------------------------------------------------------------------------------------");
document.write("<br/>");
document.write("使用isArray方法判断结果如下:");
document.write("<br/>");
document.write("------------------------------------------------------------------------------------------------");
document.write("<br/>");
document.write("变量a是数组类型的判断结果是:"+isArray(a));
document.write("<br/>");
document.write("变量b是数组类型的判断结果是:"+isArray(b));
document.write("<br/>");
document.write("变量c是数组类型的判断结果是:"+isArray(c));
document.write("<br/>");
document.write("变量arr是数组类型的判断结果是:"+isArray(arr));
document.write("<br/>");
document.write("变量arr是数组类型的判断结果是:"+isArray(arr));
document.write("<br/>");
document.write("------------------------------------------------------------------------------------------------");
document.write("<br/>");
document.write("使用isArray方法判断结果如下:");
document.write("<br/>");
document.write("------------------------------------------------------------------------------------------------");
document.write("<br/>");
document.write("变量a是数组类型的判断结果是:"+isArray(a));
document.write("<br/>");
document.write("变量b是数组类型的判断结果是:"+isArray(b));
document.write("<br/>");
document.write("变量c是数组类型的判断结果是:"+isArray(c));
document.write("<br/>");
document.write("变量arr是数组类型的判断结果是:"+isArray(arr));
document.write("<br/>");
document.write("变量arr是数组类型的判断结果是:"+isArray(arr));
document.write("<br/>");
</script>
运行结果:

以上为JavaScript判断变量数据类型的完整总结,希望能为读者提供帮助。如需了解更多内容,请持续关注本站。