JS中判断数据类型

JS是弱类型语言,所以有些场景下我们需要对进行数据类型进行判断。

背景

    此文介绍部分 JS 中用来判断数据类型的方法。

    JS中数据类型有:空字符串、null、undefined、NaN、number、boolean、string、object、array,等。

    其中的 Boolean 值判断为 false 的有:空字符串、null、undefined、NaN、0、false,

    其余所有都为 true。

    如下介绍其中最基本的六种数据类型的判断方法。
</p>

方法一:typeof

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var&nbsp;num&nbsp;=&nbsp;1;
var&nbsp;str&nbsp;=&nbsp;"hello";
var&nbsp;bool&nbsp;=&nbsp;true;
var&nbsp;n&nbsp;=&nbsp;null;
var&nbsp;arr&nbsp;=&nbsp;[1,2,3];
var&nbsp;obj&nbsp;=&nbsp;{"name":"Jet"};
var&nbsp;fun&nbsp;=&nbsp;function(){console.log(1)}
console.log(typeof&nbsp;num);&nbsp;//&nbsp;number
console.log(typeof&nbsp;str);&nbsp;//&nbsp;string
console.log(typeof&nbsp;bool);&nbsp;//&nbsp;boolean
console.log(typeof&nbsp;n);&nbsp;//&nbsp;object
console.log(typeof&nbsp;arr);&nbsp;//&nbsp;object
console.log(typeof&nbsp;obj);&nbsp;//&nbsp;object
console.log(typeof&nbsp;fun);&nbsp;//&nbsp;function

    测试发现,数组、对象、null,都显示 object,所以需要更换方法进行获取。


方法二:instanceof 和 constructor

    ① instanceof 

        这个方法其实只能用来判断是否是数组或对象,但是测试发现,数组其实也是对象。

1
2
3
4
5
6
var&nbsp;arr&nbsp;=&nbsp;[1,2,3];
var&nbsp;obj&nbsp;=&nbsp;{"name":"Jet"};
console.log(arr&nbsp;instanceof&nbsp;&nbsp;Array);&nbsp;//&nbsp;true
console.log(arr&nbsp;instanceof&nbsp;&nbsp;Object);&nbsp;//&nbsp;true
console.log(obj&nbsp;instanceof&nbsp;&nbsp;Array);&nbsp;//&nbsp;false
console.log(obj&nbsp;instanceof&nbsp;&nbsp;Object);&nbsp;//&nbsp;true

    ② constructor

        此方法其实也只用于判断是否是数组或对象,

1
2
3
4
5
6
var&nbsp;arr&nbsp;=&nbsp;[1,2,3];
var&nbsp;obj&nbsp;=&nbsp;{"name":"Jet"};
console.log(arr.constructor&nbsp;==&nbsp;Array);&nbsp;//&nbsp;true
console.log(arr.constructor&nbsp;==&nbsp;Object);&nbsp;//false
console.log(obj.constructor&nbsp;==&nbsp;Array);&nbsp;//&nbsp;false
console.log(obj.constructor&nbsp;==&nbsp;Object);&nbsp;//&nbsp;true


方法三:jQuery 系列

    jQuery 中有 $.isPlainObject()、$.isArray(obj)、$.isFunction(obj) 来进行判断,但是也有限,所以我们就需要下面描述的万能之法。


方法四:toString() 无敌万能方法

    此方法是万能的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var&nbsp;num&nbsp;=&nbsp;1;
var&nbsp;str&nbsp;=&nbsp;"hello";
var&nbsp;bool&nbsp;=&nbsp;true;
var&nbsp;n&nbsp;=&nbsp;null;
var&nbsp;arr&nbsp;=&nbsp;[1,2,3];
var&nbsp;obj&nbsp;=&nbsp;{"name":"Jet"};
var&nbsp;fun&nbsp;=&nbsp;function(){console.log(1)}
console.log(Object.prototype.toString.call(num));&nbsp;//&nbsp;[object&nbsp;Number]
console.log(Object.prototype.toString.call(str));&nbsp;//&nbsp;[object&nbsp;String]
console.log(Object.prototype.toString.call(bool));&nbsp;//&nbsp;[object&nbsp;Boolean]
console.log(Object.prototype.toString.call(n));&nbsp;//&nbsp;[object&nbsp;Null]
console.log(Object.prototype.toString.call(arr));&nbsp;//&nbsp;[object&nbsp;Array]
console.log(Object.prototype.toString.call(obj));&nbsp;//&nbsp;[object&nbsp;Object]
console.log(Object.prototype.toString.call(fun));&nbsp;//&nbsp;[object&nbsp;Function]

    所以我们就干脆自己来封装一个方法:

1
2
3
4
function&nbsp;getObjType(obj){
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;type&nbsp;=&nbsp;Object.prototype.toString.call(obj);
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;type.substring(7,&nbsp;type.length-1)
}








------ 本文结束 感谢阅读 ------
0%