星空网 > 软件开发 > Java

数据类型及数据类型的检测

 

基本数据类型

number  string  boolean  underfined  null;

引用数据类型

Object  Array  RegExp;

 


typeof 检测数据类型 但是不能检测(对象、数组、正则)

instanceof/constructor检测某一个实例是否属于一个类;

我们的constructor可以避免instanceof检测的时候,用Object也是true的问题;

console.log([].constructor === Object);//->false 

局限性:
1、用instanceof检测的时候,只要当前的这个类在实例的原型链上(可以通过原型链__proto__找到它),检测出来的结果都是true
2、基本数据类型不能用instanceof来检测;

 


 

对于对象数据类型,两种方式创建出来的都是所属类的一个实例,而且都是对象数据类型的值,是没有区别的,

var ary =[];var ary = new Array;

对于基本数据类型来说,不管哪种方式创建出来的都是所属类的一个实例,但字面量创建出来的是基本数据类型,实例创建的是对象数据类型

var num =1; var num2 = new Number("1"); console.log(typeof num1,typeof num2);//->"number" "object"

3、在类的原型继承中,instanceof检测出来的结果其实是不准确的

 

function Fn(){  } ;Fn.prototype = new Array;var f = new Fn;console.log(f instanceof Array)-> true;

虽然Fn继承了Array,但是f没有length和数字索引那些东西,所以f应该不是数组才对,但是instance检测结果是true,以为f虽然不是数组,但是在f的原型链上可以找到Array;

 


 

 

Object.prototype.toString.call(value)

1)找到Object原型上的toString方法,让方法执行,并且让方法中的this变为value(value->就是我们要检测数据类型的值);

 

->toString:一个方法,转换为字符串数据类型用的方法
每一个数据类型所属类的原型上都有toString方法,例如:Number.prototype/String.prototype/Array.prototype/Function.prototype...
除了Object上的toString,其他类原型上的toString都是把当前的数据值转换为字符串的意思

->null和undefined比较的特殊:他们所属类Null/Undefined的原型上也有toString,只不过不让我们用而已,不仅如此其实类的原型都给屏蔽了;

->HTML元素对象的toString:虽然它的原型链很长,但是在其它类的原型上都没有toString,只有在最底层Object.prototype这上才有;

var oDiv = document.getElementById("div1");oDiv.toString();调用的其实也是Object.prototype.toString...

->alert、document.write这两种输出的方式其实都是把要输出的内容先转换为字符串,然后在输出的

alert([]);//->"" alert(true);//->"true" alert({})->这个就要调用Object.prototype上的toString了 

Object.prototype.toString是用来返回对应值的所属类信息的

var oDiv = document.getElementById("div1"); var obj = {}; oDiv.toString();//->"[object HTMLDivElement]" obj.toString();//->"[object Object]"

原理:
->obj首先找到原型上toString方法,并且让toString执行,toString方法执行的时候,里面的this是obj,

同理oDiv.toString(),toString方法中的this是oDiv

->执行toString方法,返回当前方法中this的数据类型 ->"[object 当前this的直属类]",

例如:"[object HTMLDivElement]"/"[object Object]"

Object.prototype.toString.call(12);->执行原型上的toString,并且让方法中的this变为12,也就相当于返回的是12的直属类的信息 ->"[object Number]"

Object.prototype.toString.call("hjj");//->"[object String]"
依此类推:
"[object Boolean]"/"[object Null]"/"[object Undefined]"/"[object Object]"/"[object Array]"/"[object RegExp]"/"[object Function]"/"[object Math]"/"[object Date]"...
->所有的数据类型都可以用它来检测,而且非常的精准;

 

 




原标题:数据类型及数据类型的检测

关键词:数据类型

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

美亚fba头程:https://www.goluckyvip.com/tag/38614.html
美亚海外仓:https://www.goluckyvip.com/tag/38615.html
美亚外运:https://www.goluckyvip.com/tag/38616.html
美易国际物流:https://www.goluckyvip.com/tag/38617.html
美元收款账户:https://www.goluckyvip.com/tag/38618.html
美元树 Dollar Tree :https://www.goluckyvip.com/tag/38619.html
武陵山大裂谷周围景点 武陵山大裂谷周围景点图片:https://www.vstour.cn/a/411233.html
南美旅游报价(探索南美洲的旅行费用):https://www.vstour.cn/a/411234.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流