javascript 伪数组和转化为标准数组

1: 什么是伪数组

伪数组是一个含有length属性的json对象,

它是按照索引的方式存储数据,

它并不具有数组的一些方法,只能能通过Array.prototype.slice转换为真正的数组,并且带有length属性的对象。

   

    var obj = {0:'a',1:'b',length:2}; // 伪数组
    var arr = Array.prototype.slice.call(obj); // 转化为数组    
    console.log(arr);  // 返回["a","b"]

 

2:它和数组的关系

都是模拟集合

 

3:为什么会有伪数组

在日常开发中,有许多的对象是由伪数组组成,比如函数内arguments对象,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组.

 

4:为什么使用Array.prototype.slice.call()方法可以将伪数组转化数组

其实我们也可以通过[].slice.call这种形式实现同样的效果,但是通过prototype的形式执行程序效率更高,同样代码也更加优美。 

这个是V8引擎中Array.js对slice方发的实现过程,有兴趣的同学可以研究下。

我理解的大概思路就是 ↓ ,可能不对,仅供参考。

1
2
3
4
5
6
7
8
function  slice(obj) {
     var  arr =[];
     var  len = obj.length;  // length 正好对应伪数组中的length属性
     for ( var  i = 0;i < len;i++){
         arr.push[i] = obj[i];  // i 正好对应伪数组中的索引值
     }
     return  arr;
}

 

 

5:Jquery与伪数组 

其实Jquery内部大量运用了伪数组。可以说整个Jquery对象,都是构建在伪数组的基础之上的。

转载于:https://www.cnblogs.com/leiyangs/p/6416230.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值