摘要:本文章主要總結(jié)一下數(shù)據(jù)類型的識(shí)別判斷方法最后封裝一個(gè)函數(shù),可以判別所有的類型數(shù)據(jù)類型基本類型類型該類型只有一個(gè)值,即小寫,在使用聲明變量但是未對其加以初始化時(shí),這個(gè)變量的值就是。
*本文章主要總結(jié)一下js數(shù)據(jù)類型的識(shí)別判斷方法
tyoeof
instanceof
Object.prototype.toString.call
constructor
最后封裝一個(gè)函數(shù),可以判別所有的類型*
基本類型:
Undefined類型:該類型只有一個(gè)值,即undefined(小寫),在使用var聲明變量但是未對其加以初始化時(shí),這個(gè)變量的值就是undefined。
Null類型:該類型也只有一個(gè)值,即null(小寫),null值表示一個(gè)空對象指針,所以用typeof操作符檢測null值會(huì)返回object的原因。
Boolean類型:改類型有兩個(gè)值:true和false(小寫)。
Number類型:表示整數(shù)和浮點(diǎn)數(shù)
String類型:即字符串
引用類型
Object類型:即對象
Array類型:數(shù)組
Date類型:日期
RegExp類型:正則
Function類型
2.類型的識(shí)別的判斷方法 (1)typeof總結(jié):首先typeof不是方法,只是一個(gè)操作符。
可以識(shí)別標(biāo)準(zhǔn)類型(Null除外)
不能識(shí)別具體的對象類型(Function除外)
返回的值首字母都是小寫?。。。。。。?!
//識(shí)別標(biāo)準(zhǔn)類型 typeof "jerry"; //"string" typeof 12; //"number" typeof true; //"boolean" typeof undefined; //"undefined" typeof null; //"object" typeof {name:"jerry"}; //"object" //識(shí)別引用類型 typeof function(){}; //"function" typeof []; //"object" typeof new Date; //"object" typeof /d/; //"object" //創(chuàng)建一個(gè)自定義對象 function Person(){}; typeof new Person; //"object"(2)instanceof
//能夠判別引用類型 [] instanceof Array; //true /d/ instanceof RegExp; //true new Date instanceof Date; //true var a = function(){}; a instanceof Function; //true //不能判別原始類型 1 instanceof Number; //false "jerry" instanceof String; //false //能夠判別自定義對象類型及父子類型 //自定義類型 function Person(){}; Person instanceof Function; //true //父子類型 function Point(x,y){ this.x = x; this.y = y; } function Cirele(x,y,r){ Point.call(this,x,y); this.radius = r; } Circle.prototype = new Point(); Circle.prototype.constructor = Circle; var c = new Circle(1,1,2); c instanceof Circle //true c instanceof Point //true
結(jié)論:
可以判別內(nèi)置對象類型
不能判別原始類型
判別自定義對象類型
結(jié)合1和3,用instanceof可以識(shí)別所有的對象類型
(3)Object.prototype.toString.callObject.prototype.toString.call("123"); //"[object String]" //封裝函數(shù),并做截取 function type(obj){ return Object.prototype.toString.call(obj).slice(8,-1); } //測試 type("123"); //"String" //自定義類型 function Point(x,y){ this.x = x; this.y = y; } //測試 type(new Point(1,2)); //"Object"
結(jié)論:
上述封裝的函數(shù)可以識(shí)別基本類型以及引用對象類型
不能識(shí)別自定義對象類型
(4)constructor(構(gòu)造這個(gè)對象的構(gòu)造函數(shù)的本身)//判斷基本類型(基本類型也有構(gòu)造函數(shù));但是null和undefined除外,它倆沒有構(gòu)造函數(shù) "jerry".constructor === String; //true (1).constructor ===Number; //true //判斷引用類型 new Date().constructor === Date; //true [].constructor === Array; //true //判斷自定義對象 function Person(name){ this.name = name; } new Person("jerry").constructor === Person; //true //對constructor判別進(jìn)行方法的封裝 function getConstructorName(obj){ return (obj===undefined||obj===null)?obj: (obj.constructor && obj.constructor.toString().match(/functions*([^(]*)/)[1]); }
封裝的原理:
obj:假如傳入的參數(shù)是null或者undefined,沒有構(gòu)造函數(shù)直接返回
obj.constructor如果存在執(zhí)行&&后面的語句
obj.constructor.toString():將類型對應(yīng)的構(gòu)造函數(shù)轉(zhuǎn)化成字符串 "Function Number(){code...}"
math(/functions*([^(]*)/)[1]:匹配構(gòu)造函數(shù)的名稱,正則匹配
結(jié)論:
判別基本類型(Undefined/Null除外)
判別引用類型
判別自定義對象類型
結(jié)論:所以可以封裝一個(gè)函數(shù)getConstructorName判斷所有類型,但是這個(gè)函數(shù)返回的除了null和undefined是小寫之外,其他的首字母都是大寫。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/79936.html
摘要:內(nèi)置函數(shù)和對象中內(nèi)置了一些函數(shù)和對象,很多語言都會(huì)有內(nèi)置的方法,直接可以調(diào)用開發(fā)。根據(jù)語法標(biāo)準(zhǔn)提供的內(nèi)置函數(shù)包括和。注意基礎(chǔ)語法提供的內(nèi)置函數(shù)和方法只有這些,像那是瀏覽器提供給我們的。強(qiáng)制類型轉(zhuǎn)換大家應(yīng)該都知道。 js基礎(chǔ) - 變量 *大家對js一定不會(huì)陌生,入門很簡單(普通入門),很多人通過網(wǎng)絡(luò)資源、書籍、課堂等很多途徑學(xué)習(xí)js,但是有些js基礎(chǔ)的只是往往被大家遺漏,本章就從js變量...
摘要:內(nèi)置函數(shù)和對象中內(nèi)置了一些函數(shù)和對象,很多語言都會(huì)有內(nèi)置的方法,直接可以調(diào)用開發(fā)。根據(jù)語法標(biāo)準(zhǔn)提供的內(nèi)置函數(shù)包括和。注意基礎(chǔ)語法提供的內(nèi)置函數(shù)和方法只有這些,像那是瀏覽器提供給我們的。強(qiáng)制類型轉(zhuǎn)換大家應(yīng)該都知道。 js基礎(chǔ) - 變量 *大家對js一定不會(huì)陌生,入門很簡單(普通入門),很多人通過網(wǎng)絡(luò)資源、書籍、課堂等很多途徑學(xué)習(xí)js,但是有些js基礎(chǔ)的只是往往被大家遺漏,本章就從js變量...
摘要:一棧數(shù)據(jù)結(jié)構(gòu)與不同,中并沒有嚴(yán)格意義上區(qū)分棧內(nèi)存與堆內(nèi)存。引用數(shù)據(jù)類型的值是保存在堆內(nèi)存中的對象。不允許直接訪問堆內(nèi)存中的位置,因此我們不能直接操作對象的堆內(nèi)存空間。為了更好的搞懂變量對象與堆內(nèi)存,我們可以結(jié)合以下例子與圖解進(jìn)行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...
摘要:引用數(shù)據(jù)類型及堆內(nèi)存引用數(shù)據(jù)類型是保存在堆內(nèi)存中的對象,他的大小是不固定的。基礎(chǔ)數(shù)據(jù)類型在變量對象里可以直接對應(yīng)對應(yīng)的值,而引用數(shù)據(jù)類型是存儲(chǔ)在堆里的,在變量對象中對應(yīng)的是堆內(nèi)存的地址。因?yàn)槲覀冃薷谋举|(zhì)上是修改了堆內(nèi)存里的數(shù)據(jù)。 ? ??? ??因?yàn)橐郧扒岸碎_發(fā)跟數(shù)據(jù)存儲(chǔ)打交道比較少,javascript又具有自動(dòng)垃圾回收機(jī)制。數(shù)據(jù)結(jié)構(gòu)以及存儲(chǔ)相關(guān)的概念,其實(shí)是很容易被前端er忽略的。...
摘要:個(gè)人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開始萌生寫文章的想法,到著手...
閱讀 2617·2021-10-13 09:39
閱讀 3596·2021-09-30 09:52
閱讀 868·2021-09-26 09:55
閱讀 2841·2019-08-30 13:19
閱讀 1951·2019-08-26 10:42
閱讀 3242·2019-08-26 10:17
閱讀 607·2019-08-23 14:52
閱讀 3710·2019-08-23 14:39