而对于一个普通的对象来说, 如果它的所有 property 名均为正整数, 同时也有相应的 length 属性, 那么虽然该对象并不是由 Array 构造函数所创建的, 它依然呈现出数组的行为, 在这种情况下, 这些对象被称为 "类数组对象".
类数组对象是具有以下两点的对象:
拥有 length 属性, 其它属性 (索引) 为非负整数
不具有数组所具有的方法
类数组: 本质是一个对象, 只是这个 对象 的属性有点特殊, 模拟出数组的一些特性.
定义一个类数组对象 "a":
- var a= {};
- var i = 0;
- for(i=0; i<10 ; i++){
- a[i] = i*i;
- }
- a.length = i;
- var total = 0;
- for(var j=0; j<a.length; j++){
- total += a[j];
- }
使用类数组示例:
- <!DOCTYPE html>
- <HTML>
- <head>
- <meta charset="UTF-8">
- <title>
- 类数组
- </title>
- </head>
- <body>
- <div>
- </div>
- <div>
- </div>
- <div>
- </div>
- <div>
- </div>
- <script type="text/javascript">
- // 当我们通过标签选择器获取 < div>, 并在控制台打印时, 返回的值便是一个典型的类数组.
- var divs = document.getElementsByTagName("div");
- console.log(divs)
- // 定义一个数组
- var arr = ["jack", "mack", "sunny"];
- // 定义一个类数组对象
- var obj = {
- 0 : "jack",
- 1 : "mack",
- 2 : "sunny",
- length: 3,
- push: Array.prototype.push,
- splice: Array.prototype.splice
- }
- arr.push("张三") obj.push("张三") console.log(arr) console.log(obj)
- // 循环遍历
- for (var i = 0; i < arr.length; i++) {
- console.log(arr[i])
- }
- for (var j = 0; j < obj.length; j++) {
- console.log(obj[j])
- }
- </script>
- </body>
- </HTML>
类数组表现
与普通对象不同的是, 类数组对象拥有一个特性: 可以在类数组对象上应用数组的操作方法.
比如, 在 ECMAScript 5 标准中, 可以用以下方法来将上面的对象 o 合并成字符串:
console.log(Array.prototype.join.call(o));//"42,52,63"
也可以在类数组对象上使用 slice()方法获取子数组:
console.log(Array.prototype.slice.call(o, 1, 2));//[52]
来源: http://www.css88.com/qa/javascript/11929.html