4种Javascript类型检测的方式

65cb0c4cee2240cf952d9e19bb416d11.png

今天这篇文章,主要介绍了JavaScript中检测数据类型的4种方式。如果已经会了的可以当成复习,如果还不了解的话,可以认真看看,并加以运用。

1、typeof  

主要用于判断基本数据类型 。使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。

 typeof运算符的返回类型为字符串,值包括如下几种:

1. 'undefined':未定义的变量或值
2. 'boolean':布尔类型的变量或值
3. 'string' :字符串类型的变量或值
4. 'number':数字类型的变量或值
5. 'object' :对象类型的变量或值,或者null(这个是js历史遗留问题,将null作为object类型处理)
6. 'function' :函数类型的变量或值

示例如下:

 
 
console.log(typeof a);    //'undefined'    
console.log(typeof(true));  //'boolean'    
console.log(typeof '123');  //'string'    
console.log(typeof 123);   //'number'    
console.log(typeof NaN);   //'number'    
console.log(typeof null);  //'object'       
var obj = new String();    console.log(typeof(obj));    //'object'    
var  fn = function(){};    console.log(typeof(fn));  //'function'    
console.log(typeof(class c{}));  //'function'

typeof的不足之处:

  1. 不能区分对象、数组、正则,对它们操作都返回"object";(正则特殊一点后面说)

  2. Safar5,Chrome7之前的版本对正则对象返回 'function'

  3. 在IE6,7和8中,大多数的宿主对象是对象,而不是函数;如:typeof alert; //object

  4. 而在非ID浏览器或则IE9以上(包含IE9),typeof alert; //function

  5. 对于null,返回的是object.

总结:  

typeof运算符用于判断对象的类型,但是对于一些创建的对象,它们都会返回'object',有时我们需要判断该实例是否为某个对象的实例,那么这个时候需要用到instanceof运算符。

2、instanceof  

用于引用数据类型的判断。所有引用数据类型的值都是Object的实例。目的是判断一个对象在其原型链上是否存在构造函数的prototype属性。 用法:

 
 
variable instanceof constructor

示例如下:  

 
 
// example
var arr = [];
 
由于:
1. arr.constructor === Array
2. arr.__proto__ === Array.prototype
3. arr.__poto__.proto__ === Object.prototype
 
所以, 以下都返回true
1. arr instanceof arr.constructor(Array)
2. arr instanceof arr.__proto__.constructor(Array)
3. arr instanceof arr.__proto__.__poto__.constructor(Object)
 
 
如果你了解原型链的话,你很快就会得出一些结论:
1. 所有对象 instanceof Object 都会返回 true
2. 所有函数 instanceof Function 都会返回 true

总结:  

instanceof不仅能检测构造对象的构造器,还检测原型链。instanceof要求前面是个对象,后面是一个构造函数。而且返回的是布尔型的,不是true就是false。

3、Array.isArray()

Array.isArray()可以用于判断数组类型,支持的浏览器有IE9+、FireFox 4+、Safari 5+、Chrome;  兼容实现:

 
 
if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

示例如下:    

 
 
// 1.
Array.isArray([1, 2, 3, 4]);  // --> true


// 2.
var obj = {
    a: 1,
    b: 2
};
Array.isArray(obj);  // --> false


// 3.
Array.isArray(new Array);  // --> true


//4.
Array.isArray("Array");  // --> false

总结:  

isArray是一个静态方法,使用Array对象(类)调用,而不是数组对象实例。其中Array.prototype 也是一个数组,Array.isArray 优于 instanceof。

4、Object.prototype.toString.call() 

判断某个对象值属于哪种内置类型, 最靠谱的做法就是通过Object.prototype.toString方法。object.prototype.toString()输出的格式就是[object 对象数据类型]。 

示例如下:   

 
 
console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
function Person(){};
console.log(Object.prototype.toString.call(new Person));//[object Object]

本文完~

学习更多技能

请点击下方公众号

86c5cbc2b5bd6cea03cd2765fb628bae.gif

6ef8a6671bc7e40d115a4ee9ae8eb02c.png

3e7ceb04828d5c14c9e318b226e7a715.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值