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对象,都是构建在伪数组的基础之上的。

时间: 2024-10-05 19:31:59

javascript 伪数组和转化为标准数组的相关文章

在Javascript中什么是伪数组?如何将伪数组转化为标准数组?

伪数组(类数组): 无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push,pop等方法,但仍可以对真正数组遍历方法来遍历它们.典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组.可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象. function log(){ var args

在Javascript中什么是伪数组?如何将伪数组转化成标准数组?

在js中,数组是特殊的对象,凡是对象有的性质,数组都有,数组表示有序数据的集合,而对象表示无序数据的集合. 那伪数组是什么呢,当然它也是对象,伪数组一般具有以下特点: 按索引方式存储数据: 具有length属性: 没有数组的push.shift.pop等方法; function的arguments对象,还有getElementsByTagName.ele.childNodes等返回的NodeList对象,或者自定义的某些对象,这些都可以是伪数组. 我们可以通过以下几种方式将伪数组转换为标准数组:

JS数组之伪数组以及伪数组转化为标准数组

什么是伪数组? 1,具有length属性 2,能够使用数组遍历方法遍历它们 3,不具有数组的push,pop等方法 哪些是伪数组? 典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组, 诸如var obj5 = { 99: ‘abc’, length: 100 }这样的数据也是伪数组 真数组的判断方法 * 如何判断数据是不是真数组:* 1.数据 instanceof Ar

二维数组环求最大子数组

返回一个二维整数数组中最大联通子数组的和 2015年6月22日 1.题目 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 2.设计思路 参照环状一维数组,将二维数组进行扩展.只将数组的列数扩大为原来的2*n-1,行数不变. 3.源代码 #include <iostream> #include<time.h> using namespace std

javascript 转化一个数字数组为function数组(每个function都弹出相应的数字)

javascript 转化一个数字数组为function数组(每个function都弹出相应的数字) var arrNum = [2,3,4,5,6,10,7]; var arrFun = []; function change(arr){ var fun = function(val){ return function(){ return val; }; } for(var i=0;i<arr.length;i++){ arrFun.push(fun(arr[i])); } return ar

伪数组怎么转为真正的数组呢~

在用js获取元素对象的时候,很多时候需要进行将伪数组转为真正的数组的,那么如何用呢~~~ 废话少说,直接上代码~ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name=&qu

javascript数组详解(js数组深度解析)

Array 对象是一个复合类型,用于在单个的变量中存储多个值,每个值类型可以不同. 创建数组对象的方法: new Array(); new Array(size); new Array(element0, element1, ..., elementn); 1. 当索引值为负数时,会将其看作是对象的一个属性,若为非负的数字字符串,则会隐式转换为数字索引: var a= new Array(); a[-1.23]=true; a[1]="pomelo"; a["100"

javascript中的稀疏数组(sparse array)和密集数组

学习underscore.js数组相关API的时候,遇到了sparse array这个东西,以前没有接触过. 这里学习下什么是稀疏数组和密集数组. 什么是密集数组呢?在java和C语言中,数组是一片连续的存储空间,有着固定的长度.加入数组其实位置是address,长度为n,那么占用的存储空间是address[0],address[1],address[2].......address[n-1].即数组元素之间是紧密相连的,不存在空隙.如下的js代码创建的就是一个密集数组 var data = [

php中将SimpleXMLElement Object转化为普通数组

php中将SimpleXMLElement Object转化为普通数组 转: http://www.php230.com/transform-simplexmlelement-object-to-array-with-php.html 改成:属性和元素都作为数组的值 php代码: <? function xmlToArr($xml, $root = true) { if(!$xml->children()) { return (string)$xml; } $array = array();