javascript 伪数组和转化为标准数组
1: 什么是伪数组
伪数组是一个含有length属性的json对象,
它是按照索引的方式存储数据,
它并不具有数组的一些方法,只能能通过Array.prototype.slice转换为真正的数组,并且带有length属性的对象。
var obj = {0:'a',1:'b',length:2}; // 伪数组
var arr = Array.prototype.slice.call(obj); // 转化为数组
console.log(arr); // 返回["a","b"]
2:它和数组的关系
都是模拟集合
3:为什么会有伪数组
在日常开发中,有许多的对象是由伪数组组成,比如函数内arguments对象,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组.
4:为什么使用Array.prototype.slice.call()方法可以将伪数组转化数组
其实我们也可以通过[].slice.call这种形式实现同样的效果,但是通过prototype的形式执行程序效率更高,同样代码也更加优美。
这个是V8引擎中Array.js对slice方发的实现过程,有兴趣的同学可以研究下。
我理解的大概思路就是 ↓ ,可能不对,仅供参考。
|
1
2
3
4
5
6
7
8
|
function slice(obj) { var arr =[]; var len = obj.length; // length 正好对应伪数组中的length属性 for(var i = 0;i < len;i++){ arr.push[i] = obj[i]; // i 正好对应伪数组中的索引值 } return arr;} |
5:Jquery与伪数组
其实Jquery内部大量运用了伪数组。可以说整个Jquery对象,都是构建在伪数组的基础之上的。
javascript 伪数组和转化为标准数组的更多相关文章
- 在Javascript中什么是伪数组?如何将伪数组转化为标准数组?
答案: 伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们.典型的是函数的argument参数,还有像调用getElementsByTa ...
- 在javascript中什么是伪数组,如何将伪数组转化为标准数组?
这里把符合以下条件的对象称为伪数组: 1.具有length属性 2.按索引方式存储数据 3.不具有数组的push.pop等方法 伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的 ...
- javascript 伪数组与标准数组
伪数组 1. 是一个对象 2. 必须有length 属性,length 值是number 类型 3. 如果这个对象的length 不为0,那么必须要有按照下标存储的数据 标准数组 判断数据是否是标准数 ...
- 二维数组转化为一维数组 contact 与apply 的结合
将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转换.本文将从朴素的循环转换开始,逐一介绍三 ...
- javascript 转化一个数字数组为function数组(每个function都弹出相应的数字)
javascript 转化一个数字数组为function数组(每个function都弹出相应的数字) var arrNum = [2,3,4,5,6,10,7]; var arrFun = []; f ...
- js将伪数组转换为标准数组的多种方法
在js中,数组是特殊的对象,凡是对象有的性质,数组都有,数组表示有序数据的集合,而对象表示无序数据的集合. 那伪数组是什么呢,当然它也是对象,伪数组一般具有以下特点: 按索引方式存储数据: 具有len ...
- JavaScript jQuery 中定义数组与操作及jquery数组操作
首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...
- java中怎么把String转化为字符数组呢?
我想让用户输入一组字符串,然后将这个字符串的每一个赋给一个char.即,abcde char ch[]=new char[5]; ch[0]=a;ch[1]=b;..... 解决方案如下图所示: St ...
- JavaScript jQuery 中定义数组与操作及jquery数组操作 http://www.jb51.net/article/76601.htm
首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...
随机推荐
- laravel 兜底路由
在 Laravel 5.6 中,引入了兜底路由功能.所谓兜底路由,就是当路由文件中定义的所有路由都无法匹配用户请求的 URL 时,用来处理用户请求的路由,在此之前,Laravel 都会通过异常处理器为 ...
- C#概念总结(五)
1.C#特性 (Attribute) 特性适用于在运行时传递程序中的各中元素(比如 类.方法.结构.枚举.组件)的行为信息额声明性标签,可以通过使用特性向程序添加声明性信息,一个声明标签是通过放置在他 ...
- java----DOS命令
dir /? 查看帮助 dir /s 查看当前的目录,以及子目录
- MySQL is running but PID file could not be found(解决方法)
启动MySQL时报错: [root@xzw /]# service mysqld status MySQL is running but PID file could not be found ...
- Appium 常用方法总结 (python 版)
1.app后台运行 driver.background_app(5) 2.锁屏 driver.lock(5) 3.隐藏键盘 driver.hide_keyboard() 4.启动一个app或者在当前a ...
- win+python+selenium实现窗口和tab切换
这篇总结主要是关于两方面的需求:其一,在浏览器不同tab标签页之间按时间切换(同事用来不停刷新grid crontol 监控页面):其二,实现开启多个窗口,并将窗口缩放到一定范围,并齐占满整个桌面,按 ...
- mysql optimize table
mysql 数据文件的使用是只扩展,不回收.对表执行delete之后,磁盘上数据文件是不会缩小的. 通常的做法,是先逻辑导出,然后truncate 原表(或者删除重建),再导入. 另外还有一种方法是o ...
- Duplicate 复制数据库 搭建Dataguard
1 操作系统环境 此处隐藏具体信息 System IP-address db_name db_version Comment Target DB Auxiliary D ...
- 数据结构c++实现代码-链表
/*节点Node的相关声明与定义*/ //Node.h #include<iostream> using namespace std; template<typename T> ...
- ubuntu下如何编译C语言
ubuntu下如何编译C语言 如果没有gcc编译器的话,使用以下命令获取 ~# sudo apt-get install gcc同时要下载辅助工具 ~# sudo apt-get instal ...