手机版

JS区分对象和对象的六种方法综述

时间:2021-09-06 来源:互联网 编辑:宝哥软件园 浏览:

一、经常遇到的问题:

在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 '?};

我只能说哥你赢了!

以上这篇射流研究…区分目标与阿里的六种方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

版权声明:JS区分对象和对象的六种方法综述是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。