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