您好,欢迎访问一九零五行业门户网

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

本篇文章给大家带来的内容是关于javascript伪数组是什么?javascript伪数组的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
什么是伪数组?
伪数组是一个含有length属性的json对象
例如:
{    0: 1,    1: 2,    length: 2}
常见的伪数组
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 < 0) start_i = 0; // 负数的绝对值超过长度,开始值赋值为0 } else { if (start_i > len) start_i = len; // 开始值超过长度, 开始值赋值为len    }    if (end_i < 0) { // 结束值为负数,重新计算值,从尾部往前推算 end_i += len; if (end_i < 0) end_i = 0; // 负数的绝对值超过长度,结束值赋值为0 } else { 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 < length; ++k) { var key = indices[k]; if (key >= 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伪数组的简单介绍的详细内容。
其它类似信息

推荐信息