isArray方法浅析

今天看到群里有人在讨论Array的isArray方法,学习的同时自己又查了查网上的资料,记录如下:

首先是这个方法的实现原理

Array.isArray = function(value) { return Object.prototype.toString.call(value) === '[object Array]'; }

简单理解就是运用对象原型的toString方法将Array转换为字符串,之后进行比对,下面我们来详细分析下各个部分的组成。
Object.prototype.toString代表这个toString方法本来是对象原型上面的,之后call方法将toString方法中的this转换为参数value,这样传进的参数value(实际上对于此方法应该是个数组[])就可以通过原型的方法来转换为字符串,这样说可能不容易理解,我们接着看下面的call方法解析。

文档中描述:调用一个对象的一个方法,以另一个对象替换当前对象。
Call([thisObj[,arg1[, arg2[, [,.argN]]]]])

thisObj
可选项。将被用作当前对象的对象。

arg1, arg2, , argN
可选项。将被传递方法参数序列。

看下面的例子:

function a(){ this.showName = function(){ document.write(this.name); } } function Person(arg){ this.name = arg; }; var a = new a(); var alex = new Person("alex") a.showName.call(alex); 

在这段代码中, 函数a中有名为showName的方法,需要有this.name 参数,此时用call方法,传入实例alex.name, 用新对象alex替代this指针。

那么[object Array]是什么呢,它是toString方法返回值中的一种,我们先看下面的例子:

var a={a:1,b:"str"}; console.log(a.toString());

输出的结果是[object Object],a对象的{}相当于new Object(), 定义了一个对象的实例,而toString方法默认返回[object objectname],因此,小写的object是方法返回的值格式中默认的,大写的Object是对象的名字。
上面的[object Array]也是同样的道理,只是a对象此时是数组对象。

这样通过返回Object.prototype.toString.call(value) === '[object Array]'的判断结果就可以实现参数value是否为数组了。

转载于:https://www.cnblogs.com/ztoz/p/5737635.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值