摘要:事出有因后端同事同一個接口傳回的返回值類型不同,當結果是一個的時候是一個對象,多個的時候是一個數(shù)組,包含若干對象。由果而發(fā)會返回一個變量的基本類型,只有以下幾種例為啥數(shù)組和對象都返回在中,除了,,,,其它的實例都會歸為。
事出有因
后端同事同一個接口傳回的返回值類型不同,當結果是一個的時候是一個對象,多個的時候是一個數(shù)組,包含若干對象。雖然有點不合理,但是他說就這樣,不能改。哎呦,我這暴脾氣,算了自己搞。
所以對這個返回值的處理首先就是要判斷其類型,進而使用 instanceof ,但是這個方法的調(diào)用有點記不清了,是 arr instanceof Array 還是 Array instanceof arr 呢?
由因及果有這樣的疑惑是因為typeof,typeof(value)經(jīng)常用來獲取(不是判斷)變量的類型 ,可惜不能用來判斷數(shù)組和對象,因為返回的都是 object 。
“instanceof a”字面意思是 “a的實例”,那么“ b instanceof a ”的意思就可以理解為“b是a的實例嗎?”所以返回一個布爾值true或者false也就合情合理了。
由果而發(fā)typeof會返回一個變量的基本類型,只有以下幾種:number,boolean,string,object,undefined,function;例:
console.log(typeof(1));//number console.log(typeof("abc"));//string console.log(typeof(true));//boolean console.log(typeof(a));//undefined console.log(typeof({}));//object console.log(typeof([]));//object var fun = function(){} console.log(typeof(fun))//function
為啥數(shù)組和對象都返回object? 在ECMA中,除了Number,String,undefined,Boolean,其它的實例都會歸為object。或者說,typeof 就設計到這一步了
instanceof 可以用來判斷是否對象、數(shù)組、函數(shù),其他的也不行。而且它判斷數(shù)組也不是萬能的,判斷iframe中的數(shù)組時就沒有效果,因為執(zhí)行環(huán)境不同,不共用同一套原型鏈。那用什么方法呢?
可以使用Object.prototype.toString.call(object)直接返回加頭的組合類型。
所以也可以寫一個函數(shù)處理一下直接返回變量類型(不過不能判斷‘undefined‘,為啥typeof可以?因為typeof是一元操作符,不是函數(shù),不信試試console.log(typeof(typeof))。同理,instanceof是二元操作符):
var typeOf = function(param){ var TYPE = Object.prototype.toString.call(param).split(" ")[1]; return TYPE.substr(0,TYPE.length-1); }
也可以參考jQuery的處理方式:
var class2type = {}; $.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); $.type = function (obj) { return obj == null ? String(obj) : class2type[ toString.call(obj) ] || "object" };
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89944.html
摘要:每次被執(zhí)行時,和被傳入,這個根據(jù)進行累加或者是自身消減,英文原意,進而返回最新的。 之前的一篇文章:從一道面試題,到我可能看了假源碼討論了bind方法的各種進階Pollyfill,今天再分享一個有意思的題目。 從解這道題目出發(fā),我會談到數(shù)組的Reduce方法,ES6特性和Redux數(shù)據(jù)流框架中Reducer的命名等等。一道典型的題目,卻如唐代詩人章碣《對月》詩中所云:別有洞天三十六,水...
摘要:判斷一個對象是否為空對象不為,僅僅是可以使用如下方法判斷也可以數(shù)組去重或者也可以對字符串去重多個數(shù)組一起去重判斷數(shù)據(jù)類型結果為這個方法基本可以一勞永逸的解決所帶來的不確定性 判斷一個對象是否為空對象,不為null,僅僅是{};可以使用如下方法判斷: if (JSON.stringify(object) === {}) { //.. } //也可以 if (Object.keys...
摘要:用對象字面量創(chuàng)建的對象會報錯,使用構造函數(shù)創(chuàng)建的對象屬于。發(fā)現(xiàn),構造函數(shù)創(chuàng)建的,,,,。從原型鏈角度講,構造函數(shù)就是新對象的的類型。 一、前言 類型判斷有時候真的頭疼,但是一旦熟練使用就會覺得不過如此。初級的,會判斷數(shù)字和字符串。中級的,會判斷數(shù)組和對象。進階的,會判斷日期,正則,錯誤類型。高級的,會判斷plainObject,空對象,window對象等等。 基本類型:String、N...
閱讀 3281·2021-11-25 09:43
閱讀 2084·2021-09-22 10:02
閱讀 3310·2021-09-06 15:00
閱讀 2298·2019-08-30 15:56
閱讀 2347·2019-08-30 15:54
閱讀 3224·2019-08-30 14:14
閱讀 2258·2019-08-29 17:25
閱讀 2902·2019-08-29 17:16