你知道怎么分辨什么东东是不是数组不?这问题好像有点新鲜。别怕,我教你方法,肯定让你学到点新玩意儿!
let a = []; a instanceof Array; //true let b = {}; b instanceof Array; //false
快试试我这招简易的检测方法,只需要用到instanceof这家伙。只需看看你手头上那个值,看看它在原型链上在它的构造函数里有没有prototype属性就行。听着好像有点复杂?其实超容易懂的!举个例子来说,假如你有个变量a,是个数组的话,那a身上就必定有个Array.prototype属性对。然后我们再检查在a的原型链里面有没有包含Array.prototype这个属性,答案不就出来了吗?但是我得提醒你别忘了还有可能有人偷偷给prototype属性换了个样儿,所以只知道这个还不能确定它就是数组。
你是不是还傻乎乎地不知道怎么辨别呢?其实很简单,看Constructor属性就知道了!每个东西都有自己专属的构造函数~例如,如果一个对象的Constructor属性就是指向Array的话,那毫无疑问,它就是我们所说的数组!不过可别忘了,因为各种因素,querySelector方法的原型也可能发生改变。
//为body创建并添加一个iframe对象 var iframe = document.createElement('iframe'); document.body.appendChild(iframe); //取得iframe对象的构造数组方法 xArray = window.frames[0].Array; //通过构造函数获取一个实例 var arr = new xArray(1,2,3); arr instanceof Array;//false
你知道“Object.prototype.toString.call()”这个神奇的工具吗?它可以瞬间识别各种不同类型的对象,真的特别厉害,超级实用!
let a = [1,3,4]; a.constructor === Array;//true
别急告诉大家一个超级简单有效的技巧——用Array.isArray()查数组。这个办法简单得很,安全高速,值得学会。不过记得,这可是ES5的新东西,别再抱着旧招数不放。
听着!教你怎么分辨是不是数组合,老实用!觉得对你有帮助就给个赞我们今天聊了几种超简单的方法,虽然有些地方可能不准,没关系,根据实际情况挑适合自己的呗!给个好评,记得留个言,再分享给你的小伙伴们!
// 检验是否是数组 let a = [1,2,3] Object.prototype.toString.call(a) === '[object Array]';//true //检验是否是函数 let b = function () {}; Object.prototype.toString.call(b) === '[object Function]';//true //检验是否是数字 let c = 1; Object.prototype.toString.call(c) === '[object Number]';//true
评论0