zoukankan      html  css  js  c++  java
  • 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对象,都是构建在伪数组的基础之上的。

  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/leiyangs/p/6416230.html
Copyright © 2011-2022 走看看