• 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
  • 相关阅读:
    osx 编译安装配置 ruby on rails
    tls/ssl证书生成和格式转换
    nginx相关的一些记录
    用systemd脚本自动启动node js程序
    SSH Tunneling
    c代码读取目录信息
    用Qt Creator 对 leveldb 进行简单的读写
    centos 7 相关的一些记录
    发现一段精简的模板算法(非原创)
    几个常用的散列算法
  • 原文地址:https://www.cnblogs.com/lucybloguniquecom/p/5916903.html
Copyright © 2020-2023  润新知