zoukankan      html  css  js  c++  java
  • javascript类数组

    一、类数组定义:

    而对于一个普通的对象来说,如果它的所有property名均为正整数,同时也有相应的length属性,那么虽然该对象并不是由Array构造函数所创建的,它依然呈现出数组的行为,在这种情况下,这些对象被称为“类数组对象”。总而言之,具有以下两点的对象:

    • 拥有length属性,其它属性(索引)为非负整数
    • 不具有数组所具有的方法

    类数组示例:

    以下是一个简单的类数组对象:
    var o = {0:42, 1:52, 2:63, length:3}
     console.log(o);

    类数组的其他常见情况:以下是一个简单的类数组对象:
    //1.在ECMAScript 5标准中,字符串string就是一个只读的类数组对象:
    //2.在浏览器环境中,DOM方法的返回结果。如:document.getElementsByTagName()语句返回的就是一个类数组对象。
    //3.在function调用中,function代码内的arguments变量(保存传入的参数)也是一个类数组对象。
     

    二、类数组表现

    与普通对象不同的是,类数组对象拥有一个特性:可以在类数组对象上应用数组的操作方法。

    比如,在ECMAScript 5标准中,可以用以下方法来将上面的对象o合并成字符串:

    console.log(Array.prototype.join.call(o));//"42,52,63"

    也可以在类数组对象上使用slice()方法获取子数组:

    console.log(Array.prototype.slice.call(o, 1, 2));//[52]

    三、类数组判断:

    《javascript权威指南》上给出了代码用来判断一个对象是否属于“类数组”。如下:

     1 // Determine if o is an array-like object.
     2 // Strings and functions have numeric length properties, but are 
     3 // excluded by the typeof test. In client-side JavaScript, DOM text
     4 // nodes have a numeric length property, and may need to be excluded 
     5 // with an additional o.nodeType != 3 test.
     6 function isArrayLike(o) {
     7     if (o &&                                // o is not null, undefined, etc.
     8         typeof o === 'object' &&            // o is an object
     9         isFinite(o.length) &&               // o.length is a finite number
    10         o.length >= 0 &&                    // o.length is non-negative
    11         o.length===Math.floor(o.length) &&  // o.length is an integer
    12         o.length < 4294967296)              // o.length < 2^32
    13         return true;                        // Then o is array-like
    14     else
    15         return false;                       // Otherwise it is not
    16 }

    四、类数组对象转化为数组的几种方式:

    方式一:利用数据原型方法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]

    方式二:es5之前利用循环遍历

     1 // 伪数组转化成数组
     2 var makeArray = function(obj) {
     3     if (!obj || obj.length === 0) {
     4         return [];
     5     }
     6     // 非伪类对象,直接返回最好
     7     if (!obj.length) {
     8         return obj;
     9     }
    10     // 针对IE8以前 DOM的COM实现
    11     try {
    12         return [].slice.call(obj);
    13     } catch (e) {
    14         var i = 0,
    15             j = obj.length,
    16             res = [];
    17         for (; i < j; i++) {
    18             res.push(obj[i]);
    19         }
    20         return res;
    21     }
    22 
    23 };

    方式三:es6新增扩展运算符

    在浏览器环境中,document.getElementsByTagName()语句返回的就是一个类数组对象。
    var a = document.getElementsByTagName('p');
    var arr = ...a;
    在ECMAScript 5标准中,字符串string就是一个只读的类数组对象:
    var arr = ...“abc”;//['a', 'b', 'c'];
    注意:es8新增扩展运算符对对象的支持。

    javascript类数组:https://segmentfault.com/a/1190000000415572

  • 相关阅读:
    JavaScript通过正则随机生成电话号码
    (转载)JavaScript递归查询 json 树 父子节点
    JavaScript中批量设置Css样式
    (转载)Javascript removeChild()不能删除全部子节点的解决办法
    Ajax技术实现页面无刷新跳转
    (转载)js(jquery)的on绑定点击事件执行两次的解决办法
    Chrome浏览器 js 关闭窗口失效解决方法
    JavaScript随机数区间限制
    100天搞定机器学习|Day55 最大熵模型
    50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
  • 原文地址:https://www.cnblogs.com/qiqi715/p/8111582.html
Copyright © 2011-2022 走看看