第四节检测数据类型4种方式


1、typeof  用来检测数据类型的运算符
使用typeof检测数据类型,首先返回的都是一个字符串,其次字符串中包含了对应的数据类型,比如:"number","undefined","string","boolean","function","object"
局限性:type null---->"object"
不能细分是数组还是正则,还是对象中的其他值,因为使用typeof检测数据类型对于对象数据类型,最后返回结果都是“object”


2、Instanceof  检测某一个实例是否属于这个类    
var obj = [];
console.log(obj instanceof Array);
1>局线性:不能用来检测和处理字面量方式创建出来的基本数据类型值
对于基本数据类型来说,字面量方式创建出来的结果和实例方式创建出来的结果是有一定区别的,从严格意义上来讲,只有实例创建出来的对象才是标准的对象数据类型值,也是标准的String这个类的实例,对于字面量方式创建出来的结果是基本数据类型值,不是严谨的实例,但是由于js松散特点,导致了可以使用Number.prototype上提供的方法
    console.log("" instanceof String);
    console.log(true instanceof Boolean);
console.log(new String(1) instanceof String);
2>局线性:Instanceof特性:只要在当前原型链上,我们用其检测出来的结果都是true
    var obj = [];
    console.log(obj instanceof Array);
console.log(obj instanceof  Object);


3、constructor  构造函数  
1、constructor  可以处理基本数据类型的检测
      console.log('ZHAGNSAN'.constructor == String);
  2、作用和instanceof不一样
    var arr = [];
    console.log(arr.constructor == Array);
    console.log(arr.constructor == Object);
3、局线性:我们可以把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖了,这样检测出来的结果就是不准确的
             function Fn() {}
             Fn.prototype = new Array;
             var f = new Fn;
             console.log(f.constructor == Array);  //true
             console.log(f.constructor == Fn);   //false

4、Object.prototype.toString.call()首先获取Object原型上的toString方法,让方法执行,并且改变方法中的this关键字的指向
     
toString的理解
console.log((1).toString());相当于Number.prototype.toString,Number原型上toString转换为字符串,返回字符串1
console.log((1).__proto__.__proto__.toString());相当于Object.prototype.toString--->"[object Object]"

对于Number,String、Boolean Array RegExp  Date  Function原型上的toString方法都是把当前的数据类型转换为字符串类型(仅仅是转换为字符串的)
但是Object的toString()并不是用来转换为字符串的
console.log(({"name":"张三"}).toString())--->"[object Object]"
console.log((Math).toString())----->[object Math]

Object.prototype.toString()的作用是
var obj={"name": "张三"};
console.log(obj.toString());toString中的this是obj,返回obj的所属类的信息---->"[object Object]" 第一个object代表是当前实例是对象数据类型的,第二个Object代表的是obj所属类是Object

console.log((Math).toString())toString中的this是Math,那么返回的是Math所属类的信息
var ary=[];
console.log(Object.prototype.toString.call(ary));---->"[object Array]" 说明ary属于Array类的实例
console.log(Object.prototype.toString.call(null));[object Null]
console.log(Object.prototype.toString.call(true)); [object Boolean]
console.log(Object.prototype.toString.call(1));[object Number]
可以检测任意数据类型




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2016最重要的事: 大学毕业 学会了烘焙 做饭菜 学会了骑车 开车能单独上路 种了很多很多花 有了露台 和家...
    小小小庆阅读 122评论 0 0
  • 右手邂逅绰约风姿的背影。 偏偏那是你!让我遇到一个正好年龄的你,从识到恋。 左手采撷风华正茂的...
    原来是那个女孩阅读 266评论 1 12
  • 在年轻人眼中,“记账”这俩字儿和自己的英语单词书的地位几乎同等。有时觉得这事挺重要,捡起来背了几个词,觉得乏味,又...
    渔蓬阅读 272评论 0 0