伪数组

原创 2016年08月31日 14:42:58

1.符合以下条件的对象成为伪数组;

a.具有length属性;
b.按索引方式储存数据;
c.不具有数组的push,pop等方法;
如: function 内的 arguments;

var fakeArray01 = {0:'a',1:'b',length:2};//这是一个标准的有伪数组对象

2.伪数组的实现;

var fakeArray01 = {a:'a',b:'b',length:2};//没有length下标对应的值
var arr01 = Array.prototype.slice.call(fakeArray01);
alert(arr01[0]);//undefined

var fakeArray02 = {0:'a',1:'b',length:'num'};//length不是数值
var arr02 = Array.prototype.slice.call(fakeArray02);
alert(arr02[1]);//undefined

3、伪数组的 slice 的内部实现过程为:

function slice(start, end) {
    var len = ToUint32(this.length), result = [];
    for(var i = start; i < end; i++) {
        result.push(this[i]);
    }
    return result;
}

   可以看出,slice 并不需要 this 为 array 类型,只需要有 length 属性即可。并且 length 属性可以不为 number 类型,当不能转换为数值时,ToUnit32(this.length) 返回 0.


根据以上结论可以得出:fakeArray01被转换成了lenth为2的数组,其值都被初始化为undefined,fakeArray02被转换成了length为0的数组,自然访问下标为1的元素返回undefined

可以通过Array.prototype.slice.call(fakeArray)将伪数组转变为真正的Array对象。
var arr01 = Array.prototype.slice.call(fakeArray01);
alert(arr01[0]);//a
var arr02 =  [].slice.call(fakeArray01);
alert(arr02[0]);//a

Javascript的伪数组

Javascript的伪数组   在Javascript中什么是伪数组?  伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。 ...

矩阵翻转--python的伪数组

在计蒜客遇到的一道数组题,题目不难也算是水题吧!主要是为了针对python中二维数组如何创建和赋值做记录,没什么算法可言,以后有时间再改进一下,路过的dalao轻喷!!!! -------------...

伪冒泡排序------数组/链表实现

/*Bubblesort_1.cpp-------伪冒泡排序*/ /*  分别用数组和链表实现伪装冒泡排序。  第i个元素,依次跟第i+1,i+2个元进行比较,如果前者大,这交换元素。 */ ...

伪数组代码&&矩阵相乘

#include #include #define reg register int array_offset( int arrayinfo[], ... ); int main()...

伪数组

什么是伪数组 能通过Array.prototype.slice转换为真正的数组的带有length属性的对象。 这种对象有很多,比较特别的是arguments对象,还有像调用getElementsB...
  • WHACKW
  • WHACKW
  • 2015年06月18日 00:02
  • 321

数据结构伪C代码:5.数组和广义表

//------------数组的顺序存储表示------------ #include #define MAX_ARRAY_DIM 8 //假设数组维数的最大值为8 typedef struct...

js将伪数组转换为标准数组的多种方法

在js中,数组是特殊的对象,凡是对象有的性质,数组都有,数组表示有序数据的集合,而对象表示无序数据的集合。 那伪数组是什么呢,当然它也是对象,伪数组一般具有以下特点: 按索引方式存储数据;...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:伪数组
举报原因:
原因补充:

(最多只允许输入30个字)