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