javascript 中的类数组和数组
2015-10-03 14:04
531 查看
什么是类数组呢?
我们先来看一段代码:
这段代码的执行后,在 chrome 浏览器的控制台中,结果如下:
函数 fn 执行的时候,函数内的 arguments 对象就是一个类数组。它和数组一样,以从小到大的数字作为属性名,而且还有一个 length 属性,而这个 length 属性的值恰好就是 10, 和数字作为下标的属性名的个数一致。这点和数组很一致,但是同时,我们发现这个 arguments 对象并没有数组的 splice 等方法。
数组是这样的。
但是既然类数组和数组一样,以逐渐递增的数字作为属性名,同时又有 length 属性,那么咱们就可以借助数组的方法来操作类数组。
我们来手动构造一个类数组。
我们想要把这个类数组上的值复制到一个数组中,那么咱们可以这样来做:
通过借用数组上的 splice 方法,来把类数组的值 copy 到 ary 中。那么究竟为啥可以这么做呢?
我们来解析下这个代码:
[].splice;找到数组上的 splice 方法;
[].splice.call(obj,0);把 splice 方法执行的 this 关键字换成 obj;这样就用 splice 方法去操纵 obj 了。
我们先来看一段代码:
function fn() { console.dir(arguments); } fn(1,2,3,4,5,6,7,8,9,10);
这段代码的执行后,在 chrome 浏览器的控制台中,结果如下:
函数 fn 执行的时候,函数内的 arguments 对象就是一个类数组。它和数组一样,以从小到大的数字作为属性名,而且还有一个 length 属性,而这个 length 属性的值恰好就是 10, 和数字作为下标的属性名的个数一致。这点和数组很一致,但是同时,我们发现这个 arguments 对象并没有数组的 splice 等方法。
数组是这样的。
但是既然类数组和数组一样,以逐渐递增的数字作为属性名,同时又有 length 属性,那么咱们就可以借助数组的方法来操作类数组。
我们来手动构造一个类数组。
var obj = { 0:0, 1:1, 2:2, 3:3, 4:4, length:5, typeName:"object" }
我们想要把这个类数组上的值复制到一个数组中,那么咱们可以这样来做:
var ary = [].splice.call(obj, 0);
通过借用数组上的 splice 方法,来把类数组的值 copy 到 ary 中。那么究竟为啥可以这么做呢?
我们来解析下这个代码:
[].splice;找到数组上的 splice 方法;
[].splice.call(obj,0);把 splice 方法执行的 this 关键字换成 obj;这样就用 splice 方法去操纵 obj 了。
相关文章推荐
- ExtJS4 根据分配不同的树形菜单在不同的角色登录后
- js文件引入顺序问题
- ExtJS得知--------Ext.Element学习的查询方法(示例)
- 151003-动起来-Javascript
- JS(ajax笔记)
- JavaScript显示和隐藏某个div
- javascript 面向对象程序设计--深刻理解对象
- javascript 面向对象程序设计--深刻理解对象
- Json和map相互转换工具类
- JS中的定时器
- javascript 单体模式
- JSP知识总结
- javascript接口实现
- JS学习笔记
- JSP之Cookie的实现
- JSP之Cookie的实现
- JSON的学习与使用
- javascript中argument1 === void 0的意思
- JS获取浏览器的高度和宽度
- JS操作Cookies的小例子