检测数据类型

1.typeof  用来检测数据类型的运算符

 

使用typeof 检测数据类型,首先返回的都是一个字符串,其次字符串中包含了对应的数据类

例 “number”  "string" "boolean"  "function"  "object"  "undefined"

 

console.log(typeof typeof  typeof function());   // “string”

 

局限性:

  null->"object"

不能具体细分数组还是正则   返回结果都是“object”

 =========================================================

 

2.instanceof    检测某一个实例是否属于该类型

 

var obj =[12,23];

console.log(obj.instanceof  Array /RegExp ..)

 

局限性:

对于基本数据类来说,字面量方式创建出来的结果和实例方式创建出来的结果又一定的区别,从严格意义上来讲,只有实例创建出来的结果才是标准的对象数据类型值,也是标准类型     的一个实例。字面量创建出来的基本数据类型值 ,不是严谨的实例,但是由于js的松散性 所有可以使用 该类型原型上的方法。

 1 instanceof  Number  //false

 " " instanceof  String // false

[ ] instanceof  Array //true

 new Number(1)  instanceof Number  // true 

 2.  instanceof 的特性   只要在当前实例的原型链上   用instanceof 检测 的结果都是true

var ary=[];

arr instanceof Array     //true

arr instanceof Object    //true

 

 

 

 ================================================

3.constructor

检测不到Object

当类的原型重写,constructor  可能改变   所以检测可能不准确 

var num =1 ;

console.log(num.constructor === Number);   //true 

obj.constructor === Array   ...

 

reg.constructor === RegExp   //true

reg.constructor === Object   //false

 

===================

4.Object.prototype.toString.call()   最准确最常用用的方式

 

Object.prototype.toString.call()  返回[object  具体类型]  包括 null  undefined 

 Object.prototype.toString.call(Date)    //[       Date]

Object.prototype.toString.call(1)    //[       Number]

Object.prototype.toString.call("sss")   //[       String]

Object.prototype.toString.call(true)   //[       Boolean]

Object.prototype.toString.call(null)    //[       Null]

Object.prototype.toString.call(undefined)   //[       Undefined]

Object.prototype.toString.call(function(){})    //[       Function]

 

posted on 2017-12-20 13:47  cm笔记簿  阅读(107)  评论(0编辑  收藏  举报

导航