类数组
2015-11-20 16:14
274 查看
http://segmentfault.com/a/1190000000415572
google了下,中文介绍的很少。最终还是在在线的《javascript权威指南》free阅读上找到了。
看来我没细看《javascript权威指南》啊!白买了。
那么,什么是javascript 类数组呢?
不具有数组所具有的方法
ps:这是我参考的定义,实际上,只要有
没有
javascript中常见的类数组有
比如
全选复制放进笔记
然后就可以直接使用数组方法啦。
对于IE9以前的版本(DOM实现基于COM),我们可以使用
全选复制放进笔记
google了下,中文介绍的很少。最终还是在在线的《javascript权威指南》free阅读上找到了。
看来我没细看《javascript权威指南》啊!白买了。
那么,什么是javascript 类数组呢?
定义:
拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)不具有数组所具有的方法
ps:这是我参考的定义,实际上,只要有
length属性,且它的属性值为
number类型就行了。请围观评论。
类数组示例:
var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei'
非类数组示例:
var c = {'1':2};
没有
length属性,所以就不是类数组。
javascript中常见的类数组有
arguments对象和DOM方法的返回结果。
比如
document.getElementsByTagName()。
类数组判断
《javascript权威指南》上给出了代码用来判断一个对象是否属于“类数组”。如下:全选复制放进笔记
// Determine if o is an array-like object. // Strings and functions have numeric length properties, but are // excluded by the typeof test. In client-side JavaScript, DOM text // nodes have a numeric length property, and may need to be excluded // with an additional o.nodeType != 3 test. function isArrayLike(o) { if (o && // o is not null, undefined, etc. typeof o === 'object' && // o is an object isFinite(o.length) && // o.length is a finite number o.length >= 0 && // o.length is non-negative o.length===Math.floor(o.length) && // o.length is an integer o.length < 4294967296) // o.length < 2^32 return true; // Then o is array-like else return false; // Otherwise it is not }
类数组表现
之所以成为“类数组”,就是因为和“数组”类似。不能直接使用数组方法,但你可以像使用数组那样,使用类数组。var a = {'0':'a', '1':'b', '2':'c', length:3}; // An array-like object Array.prototype.join.call(a, '+''); // => 'a+b+c' Array.prototype.slice.call(a, 0); // => ['a','b','c']: true array copy Array.prototype.map.call(a, function(x) { return x.toUpperCase(); }); // => ['A','B','C']:
类数组对象转化为数组
有时候处理类数组对象的最好方法是将其转化为数组。Array.prototype.slice.call(arguments)
然后就可以直接使用数组方法啦。
var a = {'0':1,'1':2,'2':3,length:3}; var arr = Array.prototype.slice.call(a);//arr=[1,2,3]
对于IE9以前的版本(DOM实现基于COM),我们可以使用
makeArray来实现。
全选复制放进笔记
// 伪数组转化成数组 var makeArray = function(obj) { if (!obj || obj.length === 0) { return []; } // 非伪类对象,直接返回最好 if (!obj.length) { return obj; } // 针对IE8以前 DOM的COM实现 try { return [].slice.call(obj); } catch (e) { var i = 0, j = obj.length, res = []; for (; i < j; i++) { res.push(obj[i]); } return res; } };
相关文章推荐
- hdu1879 继续畅通工程 (kruskal求最小生成树)
- 微软算法100道题-----Fibonacci数列
- Spring AOP 整合Redis 缓存
- C++ 带空格的字符串输入
- ios应用启动时上下有黑边
- 伸展树的代码实现
- Nginx学习(一)
- 项目重构
- 推荐12个最好的 JavaScript 图形绘制库
- 我的博客
- Android开发之Notification详解
- c++实现智能指针
- Xcode自动注释插件VVDocumenter-Xcode
- Swift -3 函数和闭包
- Android ResourcCursorAdapter的使用
- Ajax之GET请求
- HTTP协议的8种请求类型介绍
- 如何成为一个优秀的程序员
- png 的特点
- 代码整洁之道