zoukankan      html  css  js  c++  java
  • js伪数组及转换

    什么是伪数组

    能通过Array.prototype.slice转换为真正的数组的带有length属性的对象。

    这种对象有很多,比较特别的是arguments对象,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。

    我们可以通过Array.prototype.slice.call(fakeArray)将伪数组转变为真正的Array对象。

    在 JavaScript 中, 函数中的隐藏变量 arguments 和用 getElementsByTagName 获得的元素集合(NodeList)都不是真正的数组,不能使用 push 等方法,在有这种需要的时候只能先转换为真正的数组。

    对于 arguments,可以使用 Array.prototype.slice.call(arguments); 来达到转换的目的,但对于 NodeList 则不行了,其在 IE8 及以下将会报错,只能说其 JS 引擎有所限制。

    因此,如果需要把 NodeList 转换为真正的数组,则需要做下兼容处理。

    function realArray(c) {
        try {
            return Array.prototype.slice.call(c);
        } catch (e) {
            var ret = [], i = 0, len = c.length;
            for (; i < len; i++) {
                ret[i] = (c[i]);
            }
            return ret;
        }
    }

    伪数组可以转换为真正数组条件
    1.伪数组的键值需要为数字,否则转换后数组均无初始值
    2.有length属性
    如:

    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

    fakeArray01和fakeArray02被转换成了真正的数组,但是数组中的值都为undefined



    链接:http://www.open-open.com/code/view/1420818668328
    http://www.cnblogs.com/aaronjs/archive/2011/09/05/2167541.html
  • 相关阅读:
    网站名记录
    Unity 之 图片显示的真实大小
    Unity 之 Time
    数据库死锁分析与解决
    使用命令远程注销服务器
    Web自动化测试框架改进
    Tomcat 性能监控及调优
    移动互联网安全性测试技术简介
    白盒测试中如何实现真正意义上并发测试(Java)
    接口性能测试方案 白皮书 V1.0
  • 原文地址:https://www.cnblogs.com/lucybloguniquecom/p/5916903.html
Copyright © 2011-2022 走看看