一、经常遇到的问题:
在JS中判断一个对象的类型时,通常使用typeof。这时,问题来了,因为Typeof()在识别数组时返回Object,所以JS
判断一个对象是否是数组需要一些特殊的处理方法。下面介绍六种加工方法。
第二,开门见山
判断一个对象是否是开发中的数组,建议使用以下函数:
函数isArray(obj){ if(array . isArray){ return array . isArray(obj);} else { return object . prototype . tostring . call(obj)=='[object Array]';}}
以上功能方便了急于解决问题的人。下面我会具体描述六种方法,因为考官在面试的时候可能需要全面了解你;
三六方案详解:
(1)方法1:使用toString方法
尝试通过调用toString()方法将此变量转换为表示其类型的字符串。该方法对于真实阵列是可行的。当参数对象转换为字符串时,
返回[对象参数]将导致转换失败;此外,具有数值长度属性的对象类也将无法转换。
方法如下:
!判断doctype html头标题数组/标题元字符集=' utf-8 '/脚本函数isarrayone(arr){ return span style=' color : # cc 0000;'的方法object . prototype . tostring . call(arr)==='[对象数组]';/span } var obj={ ' k1 ' : ' v1 ' };var arr=[1,2];Console.log(对象“isArrayOne(obj)”的结果);Console.log(数组“isArrayOne(arr)”的结果);/script /head body /body/html结果如下:
注意:建议用“===”全部相等代替“==”等等,因为这样效率更高!
(2)方法2:通过数组:
使用Javascript 1.8.5(ECMAScript 5),变量名。isarray()可以实现这个目标,前提是支持这个函数,但是isArray实际上是
一个人使用的方法包。
使用方法很简单:
array . isarray(obj);//obj是要检测的对象
返回真或假,如果为真,则返回数组
(3)方法三:通过算子的实例判断,
注意:instanceof运算符的左侧是子对象(要测试的对象),右侧是父构造函数(这里是Array)。
也就是说,父构造函数的子对象实例
Instance:实例:用新构造函数()创建的任何对象都称为构造函数的实例
我困惑了很久,不如直接看代码:
!doctype html html lang=' en ' head meta charset=' UTF-8 ' meta name=' Generator ' content=' EditPlus ' meta name=' Author ' content=' Keywords ' content=' meta name=' Description ' content=' title document/title scriptvar obj={ ' k1 ' : ' v1 ' };var arr=[1,2];Console.log('Instanceof处理对象的结果:'(obj instance of Array));Console.log('处理数组结果的实例:'(arr instance of Array));/script /head body /body/html运行如下:
(4)使用isPrototypeOf()函数
原理:检测一个对象是否是Array的原型(或者在原型链中,不仅是直接的父对象,而且是整个原型链中的所有父对象)
使用方法: parent . is prototypeof(child)检测parent是否是child的原型;
需要注意的是,isPrototypeOf()的函数与instancof运算符非常相似。
特定代码:
array . prototypeof . is prototypeof(arr)//true表示它是一个数组,false表示不是数组
(5)使用构造函数
特定代码:
!doctype html html lang=' en ' head meta charset=' UTF-8 ' meta name=' Generator ' content=' EditPlus ' meta name=' Author ' content=' Keywords ' content=' meta name=' Description ' content=' title document/title scriptvar obj={ ' k ' : ' v ' };var t1=新数组(1);var t2=t1console . log(obj . constructor==Array);console . log(t1 . constructor==Array);console . log(T2 . constructor==Array);/script /head body /body/html结果如图
(6)用(物体)名称的类型来判断:
代码如下:
!doctype html html lang=' en ' head meta charset=' UTF-8 ' meta name=' Generator ' content=' EditPlus ' meta name=' Author ' content=' meta name=' Keywords ' content=' meta name=' Description ' content=' title document/title script function isarrayforr(arr){ if(type of(arr)=' object '){ if(arr。concat){ return '这是数组';} else {返回"这不是数组";} } } var arr=[1];var obj={ ' k ' : ' v ' };控制台。日志(arr的类型);控制台。日志(类型(obj));控制台。日志(IsArrayFor(arr));控制台。日志(IsArrayFor(obj));/脚本/标题正文/正文/html结果如下:
这种方法其实有局限性,有的同学可能一下就破解了,那就是要是
要是对象中不巧定义了这属性怎么办
var obj={'concat':'Teast me '?};
我只能说哥你赢了!
以上这篇射流研究…区分目标与阿里的六种方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。