博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript学习总结(2)——JavaScript数据类型判断
阅读量:5916 次
发布时间:2019-06-19

本文共 4247 字,大约阅读时间需要 14 分钟。

hot3.png

 最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧!

一、JS中的数据类型

   1.数值型(Number):包括整数、浮点数。

   2.布尔型(Boolean)

   3.字符串型(String)

   4.对象(Object)

   5.数组(Array)

   6.空值(Null)

   7.未定义(Undefined)

二、判断一个变量的数据类型

1.数值型(number)

  比较常用的判断方法是:

1 function isNumber(val){
2 return typeof val === 'number';3 }

  但有些情况就不行,比如:

1 var a;2 alert(isNumber(parseInt(a)));

  这里弹出来的是true,如下图所示:

  但实际上变量a是NaN,它是不能用于数值运算的。

  所以上面的函数可以修改为:

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

修改了之后,弹出来的就是false,如下图所示:

  顺便介绍一下JavaScript isFinite() 函数,isFinite() 函数用于检查其参数是否是无穷大,如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false

2.布尔型(boolean)

  布尔类型的判断比较简单,可以用如下的方法进行判断:

1 /*2 判断变量val是不是布尔类型3 */4 function isBooleanType(val) {5     return typeof val ==="boolean";6 }

测试代码:

复制代码
1 
复制代码

运行结果:

  

3. 字符串(String)

  字符串类型的判断比较简单,可以用如下的方法进行判断:

1 /*2 判断变量是不是字符串类型3 */4 function isStringType(val) {5     return typeof val === "string";6 }

测试代码:

复制代码
1 
复制代码

运行结果:

4.未定义(Undefined)

  未定义的判断比较简单,可以用如下的方法进行判断:

1 /*2 判断变量是不是Undefined3 */4 function isUndefined(val) {5     return typeof val === "undefined";6 }

测试代码:

复制代码
1 
复制代码

运行结果:

5.对象(Object)

  由于当变量是空值Null时,typeof也会返回object,所以Object不能直接用 typeof 判断。

应该这样:

1 function isObj(str){2     if(str === null || typeof str === 'undefined'){3         return false;4     }5     return typeof str === 'object';6 }

测试代码:

复制代码
1 
复制代码

运行结果:

6.空值(Null)

  判断空值用 val === null 即可

1 function isNull(val){2       return  val === null;3 }

测试代码:

复制代码
1 /* 2 判断变量是不是null 3 */ 4 function isNull(val){ 5      return  val === null; 6 } 7 /*测试变量*/ 8 var a; 9 var b = null;10 var c = "str";11 //弹出运行结果12 alert("变量a是null的判断结果是:"+isNull(a));//false13 alert("变量b是null类型的判断结果是:"+isNull(b));//true14 alert("变量c是null类型的判断结果是:"+isNull(c));//false
复制代码

运行结果:

7.组(Array

  数组类型不可用typeof来判断。因为当变量是数组类型是,typeof会返回object

  这里有两种方法判断数组类型:

复制代码
1 /*判断变量arr是不是数组 2 方法一 3 */ 4 function isArray1(arr) { 5     return Object.prototype.toString.apply(arr) === '[object Array]'; 6 } 7  8 /*判断变量arr是不是数组 9 方法二10 */11 function isArray2(arr) {12     if(arr === null || typeof arr === 'undefined'){13         return false;14     }15     return arr.constructor === Array;16 }
复制代码

测试代码:

复制代码
1 
复制代码

运行结果:

  

分类: 
标签: 
好文要顶  关注我  收藏该文 
 
+加关注
15
0
(请您对文章做出评价)
上一篇:
下一篇:

posted on 2014-04-16 00:56  阅读(2598) 评论(14)  

评论

 2014-04-16 08:27  

   
 

很实用,谢谢分享。

 
     
支持(0) 反对(0)
  

 2014-04-16 09:02  

   
 

果断收藏。

 
     
支持(0) 反对(0)
  

 2014-04-16 09:08  

   
 

你确定所有浏览器都合适?IE6?IE7?

 
     
支持(0) 反对(0)
  

 2014-04-16 09:08  

   
 

额,这个两个"=" 和三个"=" 啥区别,求指教,我基础太差啦 ,为啥要用三个"=" 呢

 
     
支持(0) 反对(1)
  

 2014-04-16 09:18  

   
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
var 
testType = {
    
isType: 
function 
(typename, value) {
        
//typename:String, Array, Boolean, Object, RegExp, Date, Function,Number //兼容
        
//typename:Null, Undefined,Arguments    //IE不兼容
        
return 
Object.prototype.toString.apply(value) === 
'[object ' 
+ typename + 
']'
;
    
},
    
isUndefined: 
function 
(obj) {
        
///<summary>是否定义</summary>
 
        
return 
(
typeof 
(obj) === 
"undefined" 
|| obj === undefined);
    
},
    
isNull: 
function 
(obj) {
        
///<summary>是否Null</summary>
 
        
return 
(obj === 
null 
|| 
this
.isUndefined(obj));
    
},
    
isBoolean: 
function 
(obj) {
        
return 
this
.isType(
"Boolean"
, obj);
    
},
    
isObjectEmpty: 
function 
(obj) {
        
if 
(
this
.isNull(obj)) 
return 
true
;
        
for 
(
var 
in 
obj) {
            
if 
(!obj.hasOwnProperty(n)) 
continue
;
            
return 
false
;
        
}
        
return 
true
;
    
},
    
isNullEmpty: 
function 
(s) {
        
return 
(
this
.isNull(s) || s === 
''
);
    
},
    
isFunction: 
function 
(fun) {
        
return 
this
.isType(
"Function"
, fun);
    
},
    
isNumeric: 
function 
(n) {
        
//return this.isType("Number", n) && !isNaN(n) && isFinite(n);;
        
return 
!isNaN(parseFloat(n)) && isFinite(n);
    
},
    
isString: 
function 
(obj) {
        
return 
this
.isType(
"String"
, obj);
    
},
    
isObject: 
function 
(obj) {
        
return 
!
this
.isNull(obj) && 
this
.isType(
"Object"
, obj);
    
},
    
isArray: 
function 
(value) {
        
return 
Array.isArray ? Array.isArray(value) : 
this
.isType(
"Array"
, value);
    
},
    
isJquery: 
function 
(obj) {
        
return 
(obj 
instanceof 
window.jQuery);
    
},
    
isWindow: 
function 
(obj) { 
return 
!
this
.isNull(obj) && obj == obj.window },
    
isElement: 
function 
(obj) { 
var 
t = obj && (obj.ownerDocument || obj).documentElement; 
return 
t ? 
true 
false 
}
};

 
     

转载于:https://my.oschina.net/zhanghaiyang/blog/606515

你可能感兴趣的文章
走向5G时代功在技术之外
查看>>
JAVA之抽象类与接口的区别
查看>>
2021年3GPP物联网标准将占蜂窝物联网无线节点出货量一半以上
查看>>
Oracle 12c的一些新等待事件
查看>>
加拿大三分之二的电力供应来自可再生能源
查看>>
java序列化
查看>>
不可忽视的项目文档管理
查看>>
刀片服务器故障一例
查看>>
第四章—使用函数
查看>>
puppet 部署jdk
查看>>
如何利用路由器防止DoS拒绝服务疯狂攻击
查看>>
使用 JFreeChart来创建基于web的图表
查看>>
Android Launcher分析和修改2——Icon修改、界面布局调整、壁纸设置
查看>>
马哥2016全新Linux+Python高端运维班-Linux用户创建及权限管理
查看>>
699的高性价比,大神F1极速版体验一览
查看>>
开放与互联:透明工厂如何引领中国制造升级?
查看>>
Linux下添加php的zip模块
查看>>
memcache
查看>>
Percona XtraBackup备份数据库关于数据路径默认选择和show variables
查看>>
单例模式和静态方法的区别
查看>>