javascript
JS-循环清空对象 判断数据类型的5种常用方法
應(yīng)用場(chǎng)景:一個(gè)頁(yè)面具有大量數(shù)據(jù)錄入功能,在數(shù)據(jù)錄入保存成功之后,需要刷新頁(yè)面,即清空所有的數(shù)據(jù)。因?yàn)槲野阉械淖侄味x到一個(gè)對(duì)象中,所以要清空這個(gè)對(duì)象,如果字段少,可以直接賦值清空,但是數(shù)據(jù)多的時(shí)候,直接賦值清空,就會(huì)產(chǎn)生大量的冗余代碼,導(dǎo)致代碼看起來(lái)多而亂,不好看,所以要寫個(gè)函數(shù)循環(huán)清空。
針對(duì)我的需求,我可以不用判斷數(shù)據(jù)的類型了,因?yàn)槲抑浪褪且粋€(gè)對(duì)象;但是,想兼容更完善的話,首先需要判斷要清空的數(shù)據(jù)類型。
循環(huán)清空對(duì)象函數(shù):
針對(duì)這個(gè)函數(shù),可以舉一反三,改成符合自己需求的函數(shù)。
// 循環(huán)清空對(duì)象 function clearParams(params){if(!(typeof (params) == 'object')) return;Object.keys(params).forEach((val,index,arr)=>{params[val] = '';});return params; }let params = {toShowroomDate: new Date(),isHours:false,amount:0,receptionMemo:'',marketEventCode:null,marketEventName:''};// 調(diào)用清空函數(shù) clearParams(params); //{toShowroomDate: '',isHours:'', amount:'',receptionMemo:'',marketEventCode:'',marketEventName:''};?
JS的數(shù)據(jù)類型有7種:
//JS的數(shù)據(jù)類型有7種:number,string,Boolean,null,undefined,symbol,對(duì)象(數(shù)組,數(shù)組也是對(duì)象)?
判斷數(shù)據(jù)類的幾種方法如下:
1.typeof
//typeof返回?cái)?shù)據(jù)類型,包含這7種: number、string、boolean、symbol、object、undefined、functiontypeof null? ?返回類型錯(cuò)誤,返回object
引用類型,除了function返回function類型外,其他均返回object。
其中,null 有屬于自己的數(shù)據(jù)類型 Null , 引用類型中的 數(shù)組、日期、正則 也都有屬于自己的具體類型,而 typeof 對(duì)于這些類型的處理,只返回了處于其原型鏈最頂端的 Object 類型,沒(méi)有錯(cuò),但不是想要的結(jié)果。
?
2.instanceof
instanceof 是用來(lái)判斷 A 是否為 B 的實(shí)例,表達(dá)式為:A instanceof B,如果 A 是 B 的實(shí)例,則返回 true,否則返回 false。
?instanceof 運(yùn)算符用來(lái)測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的 prototype 屬性,意思就是該變量通過(guò)原型鏈上能否找到構(gòu)造函數(shù)的prototype 屬性,還不清楚原型鏈的請(qǐng)看原型鏈
在這里需要特別注意的是:instanceof 檢測(cè)的是原型(instanceof 只能用來(lái)判斷兩個(gè)對(duì)象是否屬于實(shí)例關(guān)系, 而不能判斷一個(gè)對(duì)象實(shí)例具體屬于哪種類型)
1.// Array類型的變量滿足arr instanceof Array和arr instanceof Object,都返回true// 只有Object類型變量才滿足obj instanceof Array返回false,obj instanceof Object返回trueArray.prototype === arr.__proto__Object.prototype === arr.__proto__.__proto__2.//instanceof 后面一定要是對(duì)象類型,大小寫不能寫錯(cuò),該方法適用于一些條件選擇或分支( 瀏覽器控制臺(tái)測(cè)試:)1)new Date() instanceof Date//true2)[1,2,3] instanceof Array //true3)let b;b=function s(){};b instanceof Function// true?
3.constructor
constructor是原型prototype的一個(gè)屬性,當(dāng)函數(shù)被定義時(shí)候,js引擎會(huì)為函數(shù)添加原型prototype,并且這個(gè)prototype中constructor屬性指向函數(shù)引用,?因此重寫prototype會(huì)丟失原來(lái)的constructor。
不過(guò)這種方法有問(wèn)題:
1.null 和 undefined 無(wú)constructor,這種方法判斷不了。
2.如果自定義對(duì)象,開(kāi)發(fā)者重寫prototype之后,原有的constructor會(huì)丟失,因此,為了規(guī)范開(kāi)發(fā),在重寫對(duì)象原型時(shí)一般都需要重新給 constructor 賦值,以保證對(duì)象實(shí)例的類型不被篡改。
?
4.Object.prototype.toString.call()
toString() 是 Object 的原型方法,調(diào)用該方法,默認(rèn)返回當(dāng)前對(duì)象的 [[Class]] 。這是一個(gè)內(nèi)部屬性,其格式為 [object Xxx] ,其中 Xxx 就是對(duì)象的類型。
對(duì)于 Object 對(duì)象,直接調(diào)用 toString()? 就能返回 [object Object] 。而對(duì)于其他對(duì)象,則需要通過(guò) call / apply 來(lái)調(diào)用才能返回正確的類型信息。
?
5.isNaN()
isNaN() 函數(shù)用于檢查其參數(shù)是否是非數(shù)字值。
如果參數(shù)值為 NaN 或字符串、對(duì)象、undefined等非數(shù)字值則返回 true, 否則返回 false。
6.jq中判斷數(shù)據(jù)類型的方法
jQuery提供了一系列工具方法,用來(lái)判斷數(shù)據(jù)類型,以彌補(bǔ)JavaScript原生的typeof運(yùn)算符的不足。以下方法對(duì)參數(shù)進(jìn)行判斷,返回一個(gè)布爾值。jQuery.isArray();是否為數(shù)組 jQuery.isEmptyObject();是否為空對(duì)象 (不含可枚舉屬性)。 jQuery.isFunction():是否為函數(shù) jQuery.isNumberic():是否為數(shù)字 jQuery.isPlainObject():是否為使用“{}”或“new Object”生成對(duì)象,而不是瀏覽器原生提供的對(duì)象。 jQuery.isWindow(): 是否為window對(duì)象; jQuery.isXMLDoc(): 判斷一個(gè)DOM節(jié)點(diǎn)是否處于XML文檔中。作者:8d2855a6c5d0 鏈接:https://www.jianshu.com/p/967d6db70437 來(lái)源:簡(jiǎn)書 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。?
參考文章:
Object.keys()
js判斷數(shù)據(jù)類型
判斷一個(gè)變量是數(shù)組還是對(duì)象
判斷數(shù)據(jù)類型的5種方法
總結(jié)
以上是生活随笔為你收集整理的JS-循环清空对象 判断数据类型的5种常用方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Win11 Canary 25915 预
- 下一篇: JS疑惑-1(连续赋值)