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

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

 最近做项目中遇到了一些关于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  

   
 

很实用,谢谢分享。

 
     
  

 2014-04-16 09:02  

   
 

果断收藏。

 
     
  

 2014-04-16 09:08  

   
 

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

 
     
  

 2014-04-16 09:08  

   
 

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

 
     
  

 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://www.cnblogs.com/zhanghaiyang/p/7213287.html

你可能感兴趣的文章
一步一步带你实现virtual dom(一)
查看>>
android:http
查看>>
详解JAVA实现支付宝接口编程
查看>>
HTTP 请求返回代码含义
查看>>
python+soket实现UDP协议的客户/服务端中文聊天程序
查看>>
android:使用BaseExpandableListAdapter实现可折叠的列表
查看>>
什么时候用存储过程
查看>>
【MongoDB for Java】Java操作MongoDB
查看>>
0c-42-ARC模式下如何兼容非ARC的类
查看>>
程序员进阶之路—如何独当一面
查看>>
闲话WPF之十一(Dependency属性 [3] )
查看>>
JS组件系列——基于Bootstrap Ace模板的菜单Tab页效果优化
查看>>
eclipse中tomcat快速启动关闭参数设置
查看>>
C++ extern "c "的作用
查看>>
实践:几十亿条数据分布在几十个节点上的毫秒级实时排序方法
查看>>
PMWiki安装教程
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
一个经典编程面试题的“隐退”
查看>>
POJ2109
查看>>
显示创建一个表的SQL语句
查看>>