摘要:事出有因后端同事同一个接口传回的返回值类型不同,当结果是一个的时候是一个对象,多个的时候是一个数组,包含若干对象。由果而发会返回一个变量的基本类型,只有以下几种例为啥数组和对象都返回在中,除了,,,,其它的实例都会归为。
事出有因
后端同事同一个接口传回的返回值类型不同,当结果是一个的时候是一个对象,多个的时候是一个数组,包含若干对象。虽然有点不合理,但是他说就这样,不能改。哎呦,我这暴脾气,算了自己搞。
所以对这个返回值的处理首先就是要判断其类型,进而使用 instanceof ,但是这个方法的调用有点记不清了,是 arr instanceof Array 还是 Array instanceof arr 呢?
由因及果有这样的疑惑是因为typeof,typeof(value)经常用来获取(不是判断)变量的类型 ,可惜不能用来判断数组和对象,因为返回的都是 object 。
“instanceof a”字面意思是 “a的实例”,那么“ b instanceof a ”的意思就可以理解为“b是a的实例吗?”所以返回一个布尔值true或者false也就合情合理了。
由果而发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
为啥数组和对象都返回object? 在ECMA中,除了Number,String,undefined,Boolean,其它的实例都会归为object。或者说,typeof 就设计到这一步了
instanceof 可以用来判断是否对象、数组、函数,其他的也不行。而且它判断数组也不是万能的,判断iframe中的数组时就没有效果,因为执行环境不同,不共用同一套原型链。那用什么方法呢?
可以使用Object.prototype.toString.call(object)直接返回加头的组合类型。
所以也可以写一个函数处理一下直接返回变量类型(不过不能判断‘undefined‘,为啥typeof可以?因为typeof是一元操作符,不是函数,不信试试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" };
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89944.html
摘要:每次被执行时,和被传入,这个根据进行累加或者是自身消减,英文原意,进而返回最新的。 之前的一篇文章:从一道面试题,到我可能看了假源码讨论了bind方法的各种进阶Pollyfill,今天再分享一个有意思的题目。 从解这道题目出发,我会谈到数组的Reduce方法,ES6特性和Redux数据流框架中Reducer的命名等等。一道典型的题目,却如唐代诗人章碣《对月》诗中所云:别有洞天三十六,水...
摘要:判断一个对象是否为空对象不为,仅仅是可以使用如下方法判断也可以数组去重或者也可以对字符串去重多个数组一起去重判断数据类型结果为这个方法基本可以一劳永逸的解决所带来的不确定性 判断一个对象是否为空对象,不为null,仅仅是{};可以使用如下方法判断: if (JSON.stringify(object) === {}) { //.. } //也可以 if (Object.keys...
摘要:用对象字面量创建的对象会报错,使用构造函数创建的对象属于。发现,构造函数创建的,,,,。从原型链角度讲,构造函数就是新对象的的类型。 一、前言 类型判断有时候真的头疼,但是一旦熟练使用就会觉得不过如此。初级的,会判断数字和字符串。中级的,会判断数组和对象。进阶的,会判断日期,正则,错误类型。高级的,会判断plainObject,空对象,window对象等等。 基本类型:String、N...
阅读 3253·2021-11-25 09:43
阅读 2065·2021-09-22 10:02
阅读 3244·2021-09-06 15:00
阅读 2255·2019-08-30 15:56
阅读 2325·2019-08-30 15:54
阅读 3171·2019-08-30 14:14
阅读 2242·2019-08-29 17:25
阅读 2886·2019-08-29 17:16