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

2017-08-20  本文已影响0人  奶瓶SAMA

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]
可以检测任意数据类型




上一篇下一篇

猜你喜欢

热点阅读