麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > JavaScript > 正文

JavaScript之類型檢測(cè)

2019-11-06 07:14:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

判斷javaScript數(shù)據(jù)類型,也就是我們說(shuō)的類型檢測(cè),有五種方法:分別是typeof運(yùn)算符,instanceof操作符,Object.PRototype.toString方法,constructor屬性,duck type,這部分我推薦大家看看阮大大寫(xiě)的Javascript標(biāo)準(zhǔn)參考教程

使用typeof檢測(cè)對(duì)象類型:

typeo作為最常用的檢測(cè)類型的方法,返回字符串類型,適合函數(shù)對(duì)象和基本類型(JavaScripe中的基本類型:number,string,boolean,null,undefined,object[對(duì)象])的判斷

typeof 100 //"number"typeof true //"boolean"typeof function //"function"typeof undefined //"undefined"typeof new Object() //"object"typeof [1,2] //"object"typeof NaN //"number"typeof null //"object"

可以看到,對(duì)于最基本的類型可以測(cè)試出類型,但對(duì)于其他的,包括日期,數(shù)組等大多都返回object類型,而且null也返回的是object類型,也就是沒(méi)有辦法知道確切的類型

使用instanceof檢測(cè)對(duì)象類型:

obj instanceof Object:左邊操作數(shù)obj為對(duì)象(如果不小心寫(xiě)成基本類型,比如數(shù)字啥的,就會(huì)返回false),右邊操作數(shù)Object為函數(shù)對(duì)象或者是函數(shù)構(gòu)造器,否則拋出TypeError

實(shí)質(zhì)就是:instanceof操作符判斷左操作數(shù)對(duì)象的原型鏈上是否有右邊這個(gè)構(gòu)造函數(shù)的prototype屬性,也就是說(shuō)指定對(duì)象是否是某個(gè)構(gòu)造函數(shù)的實(shí)例,最后返回布爾值,這個(gè)對(duì)整個(gè)原型鏈上的對(duì)象都是有效的,由于instanceof對(duì)整個(gè)原型鏈上的對(duì)象都有效,因此同一個(gè)實(shí)例對(duì)象,可能會(huì)對(duì)多個(gè)構(gòu)造函數(shù)都返回true!

[1,2] instanceof Array //truenew Object() instanceof Array /false

再某些ie版本中存在跨iframe問(wèn)題,每個(gè)iframe下都有自己的一套原型鏈,跨frame實(shí)例化的對(duì)象彼此是不共享原型鏈,所以不同window或iframe間的對(duì)象類型檢測(cè)不能使用instanceof!!!

使用Object.prototype.toString方法:

Object.prototype.toString.apply([]); //"[object Array]"Object.prototype.toString.apply(function(){}) //"[object Function]"Object.prototype.toString.apply(null) //"[object Null]"Object.prototype.toString.apply(undefined) //"[object Undefined]"http://IE/7/8的Object.protope.toString.apply(null) //[object Object]"

使用constructor屬性:

所有實(shí)例對(duì)象都有constructor屬性,constructor屬性指向prototype對(duì)象所在的構(gòu)造函數(shù),就是說(shuō)指向創(chuàng)建這個(gè)實(shí)例的構(gòu)造函數(shù),還是推薦阮大大的文章,看這個(gè)constructor屬性

使用duck type(鴨子類型):

比如判斷一個(gè)對(duì)象是否是數(shù)組,可以看這個(gè)對(duì)象是否擁有l(wèi)ength()等方法,不禁想到類數(shù)組轉(zhuǎn)數(shù)組的方法,看這里類數(shù)組轉(zhuǎn)數(shù)組了

JavaScript之類型檢測(cè)的總結(jié):

1.typeof:適合基本類型和function檢測(cè),遇到null失效

2.通過(guò){}.toString拿到,適合內(nèi)置對(duì)象和基本類型,遇到null和undefined失效

3.instanceof:適合自定義對(duì)象,也可以用來(lái)檢測(cè)原生對(duì)象,在不同iframe和window間檢測(cè)時(shí)失效

來(lái)看一道面試題:怎么判斷一個(gè)變量類型是不是數(shù)組?

1.通過(guò)constructor(不推薦使用):

[].constructor===Array //true

2.通過(guò)instanceof:

[] instanceof Array //true

在頁(yè)面中含多個(gè)窗體或者iframe,那么會(huì)產(chǎn)生很多執(zhí)行環(huán)境,一個(gè)iframe下的數(shù)組不是另一個(gè)窗體下構(gòu)造函數(shù)的實(shí)例,那么如果出現(xiàn)這種極端條件,instanceof也不推薦使用

3.通過(guò)Array.isArray:

//在新版瀏覽器,IE9+都已經(jīng)實(shí)現(xiàn)了原生方法:Array.isArray([1,2]); //true

4.通過(guò)toSting:

Object.prototype.toString.call([]) === '[object Array]'
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久另类视频 | 1区2区3区在线观看 欧美特黄a | 久久激情小视频 | 国产一精品一av一免费爽爽 | 久久久www视频 | 全黄性色大片 | 免费在线观看国产精品 | 美女羞羞视频网站 | 护士hd欧美free性xxxx | 日本看片一区二区三区高清 | 麻豆一二区 | 国产精品jk白丝蜜臀av软件 | 国产精品久久久久久久四虎电影 | 国产成人av在线播放 | 国产精品久久久久久久午夜片 | 最新av在线播放 | 中文字幕四区 | 国产一区二区视频观看 | 最新中文在线视频 | 日本成年免费网站 | 十级毛片 | 狠狠干网站 | 性高湖久久久久久久久aaaaa | 精品国产一级毛片 | 在线播放视频一区二区 | 特级黄色一级毛片 | 欧美黄色片一级 | 一级性色| 欧美一级免费看 | 欧美视频99| 午夜伦情电午夜伦情电影 | 亚洲国产精品久久久久婷婷老年 | 久久国产28 | 亚洲va久久久噜噜噜久牛牛影视 | 91av网址| 欧美成人精品一区二区三区 | 91av网址| 免费放黄网站在线播放 | 亚洲精久久 | 黄色一级片在线免费观看 | 大学生一级毛片在线视频 |