JavaScript判断变量数据类型的完整指南

作者:纸飞机

时间:2026-10-30

浏览:658

本文详细总结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,如图所示:

JavaScript数据类型分类

然而变量a实际值为NaN,它无法参与数值运算。

因此,判断函数应优化为:


function isNumber(val){
return typeof val === 'number' && isFinite(val);
} 

优化后执行结果变为false,如图所示:

JavaScript数据类型分类

补充说明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> 

运行结果:

JavaScript数据类型分类

字符串(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> 

运行结果:

JavaScript数据类型分类

未定义(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> 

运行结果:

JavaScript数据类型分类

对象(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> 

运行结果:

JavaScript数据类型分类

空值(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 

运行结果:

JavaScript数据类型分类

数组(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数据类型分类

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

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章