Javascript伪数组是什么?javascript伪数组的简单介绍

本篇文章给大家带来的内容是关于javascript伪数组是什么?javascript伪数组的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

什么是伪数组?

伪数组是一个含有length属性的json对象

例如:

{    0: 1,    1: 2,    length: 2}

登录后复制

常见的伪数组

立即学习“Java免费学习笔记(深入)”;

arguments、NodeList、HTMLCollection、Jquery对象…

伪数据如何转成标准数组

使用Array.slice

function toArray() {    console.log(arguments instanceof Array) // false    arguments = Array.prototype.slice.call(arguments)    console.log(arguments instanceof Array) // true    return arguments}toArray(1,2,3) // [1, 2, 3]

登录后复制

Array.slice源码解析

function ArraySlice(start, end) {    CHECK_OBJECT_COERCIBLE(this, "Array.prototype.slice");    var array = TO_OBJECT(this);     var len = TO_LENGTH(array.length); // 取数据length    var start_i = TO_INTEGER(start); // 开始值转Number    var end_i = len; // 结束值直接取array的length    if (!IS_UNDEFINED(end)) end_i = TO_INTEGER(end); // 参数有end则使用end    if (start_i < 0) { // 开始值为负数,重新计算值,从尾部往前推算        start_i += len;        if (start_i  len) start_i = len; // 开始值超过长度, 开始值赋值为len    }    if (end_i < 0) { // 结束值为负数,重新计算值,从尾部往前推算        end_i += len;        if (end_i  len) end_i = len; // 开始值超过长度, 结束值赋值为len    }    var result = ArraySpeciesCreate(array, MaxSimple(end_i - start_i, 0)); // 创建一个数组    if (end_i < start_i) return result; // 结束值小于开始值,那么直接返回空数组    if (UseSparseVariant(array, len, IS_ARRAY(array), end_i - start_i)) { // array是数组        %NormalizeElements(array);        if (IS_ARRAY(result)) %NormalizeElements(result);        SparseSlice(array, start_i, end_i - start_i, len, result);    } else { // array不是数组        SimpleSlice(array, start_i, end_i - start_i, len, result);    }    result.length = end_i - start_i;  // 数组长度赋值    return result;}/** array 具体操作的数组* start_i 开始位置* del_count 需要处理的长度* len 数组长度* deleted_elements 利用浅拷贝,返回结果,对于slice来说,是选择的那部分数组,对于splice来说,是删除的那些数组*/function SparseSlice(array, start_i, del_count, len, deleted_elements) {    // Move deleted elements to a new array (the return value from splice).    var indices = %GetArrayKeys(array, start_i + del_count);    if (IS_NUMBER(indices)) {        var limit = indices;        for (var i = start_i; i < limit; ++i) {            var current = array[i];            if (!IS_UNDEFINED(current) || i in array) {                %CreateDataProperty(deleted_elements, i - start_i, current);            }        }    } else {        var length = indices.length;        for (var k = 0; k = start_i) {                var current = array[key];                if (!IS_UNDEFINED(current) || key in array) {                    %CreateDataProperty(deleted_elements, key - start_i, current);                }            }        }    }}/** array 具体操作的数组* start_i 开始位置* del_count 需要处理的长度* len 数组长度* deleted_elements 利用浅拷贝,返回结果,对于slice来说,是选择的那部分数组,对于splice来说,是删除的那些数组*/function SimpleSlice(array, start_i, del_count, len, deleted_elements) {    for (var i = 0; i < del_count; i++) {        var index = start_i + i;        if (index in array) {            var current = array[index];            %CreateDataProperty(deleted_elements, i, current);        }    }}

登录后复制

以上就是Javascript伪数组是什么?javascript伪数组的简单介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2740045.html

(0)
上一篇 2025年3月8日 02:12:12
下一篇 2025年3月8日 02:12:20

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论