Javascript伪数组是什么?javascript伪数组的简单介绍
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript伪数组是什么?javascript伪数组的简单介绍,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3236字,纯文字阅读大概需要5分钟。
内容图文
本篇文章给大家带来的内容是关于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伪数组的简单介绍的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的Javascript伪数组是什么?javascript伪数组的简单介绍全部内容,希望文章能够帮你解决Javascript伪数组是什么?javascript伪数组的简单介绍所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。