伪数组

原创 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
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

前端复习--Array.prototype.slice.call(arguments)

Array.prototype.slice.call(arguments)可以将 类数组 转化为真正的数组。面试中常常问到此,但是,为什么呢? 1 首先是Array同Object,Number等 都是...

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

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

Javascript的伪数组

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

伪数组代码&&矩阵相乘

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

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

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

伪数组

什么是伪数组 能通过Array.prototype.slice转换为真正的数组的带有length属性的对象。 这种对象有很多,比较特别的是arguments对象,还有像调用getElementsB...

1008. 数组元素循环右移问题 (20)

1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B ...

bmp转c数组(误差扩散)

  • 2017-04-26 17:06
  • 60KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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