javascript 类数组概念详解

javascript 类数组概念详解

javascript 类数组概念详解

1.什么是类数组(ArrayLike)

  1. 本身是一个对象,拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
  2. 不具有数组所具有的方法

2.判断一个对象是否属于类数组

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
}

isFinite():如果参数是 NaN(调用isNaN()返回true),正无穷大或者负无穷大,会返回false,其他返回 true。

3.类数组转化为数组的方法

Array.prototype.slice.call(arrayLike)

Array.prototype.slice的内部实现

Array.prototype.slice = function(start,end){  
  var result = new Array();  
  start = start || 0;  
  end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键  
  for(var i = start; i < end; i++){  
       result.push(this[i]);  
  }  
  return result;  
} 

根据slice的内部实现,如果类数组索引不以0开头会出现转化不全的情况,比如

var a = {1:'asda',2:'aa',length:2};
console.log(Array.prototype.slice.call(a));//[empty, "asda"]

4.将数组转化为类数组(以参数列表的形式)

可以利用apply方法(它将传入的第二个参数(应该是一个数组)作为函数参数调用调用它的函数)来实现

function convertToArrayLike(array){
    if(array instanceof Array){  
        return arguments.callee.apply(this,array)
    }
    else {
        return arguments;
    }
}

以上函数接受一个数组的输入,输出一个类数组

转载于:https://my.oschina.net/u/3400107/blog/1840284

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101575.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 3D游戏建模的入门学习方法及技巧

    3D游戏建模的入门学习方法及技巧选一个你感兴趣的模型利用你感兴趣的任何物品或形象的预制模型。选一个可以激发你想象,让你知道清楚知道自己的模型该是什么样子,该怎么动的模型。你可以根据自己的喜好和需要加强现有模型。预制模型可以让你在开始建模之前,体验模型的检查和操作。从简单模型入手从复杂3D模型入手,你可能会备受打击。选一个简单的结构,然后开始学习。你不仅想要学会3D建模的基本知识,还需要慢慢学习掌握不同的工具、技巧。瓶子一样的圆柱体是一个很好的入门模型。或者你可以用更简单的立方体来熟悉所有工具技巧的用法。复杂模型可能会.

    2022年5月20日
    43
  • pycharm 2021.11.3激活码【2021最新】

    (pycharm 2021.11.3激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html6B1QWJC8H5-eyJsa…

    2022年3月28日
    38
  • 别踩坑!使用MySQL唯一索引请注意「建议收藏」

    别踩坑!使用MySQL唯一索引请注意「建议收藏」背景在程序设计中了,我们往往需要确保数据的唯一性,比如在常见的注册模块,我们需要确保一个手机号只能注册为一个账号。这种情况下,我们的程序往往是第一道关卡,用户来注册之前,首先判断这个手机号是否已经注册,如果已经注册则返回错误信息。但是我们不能确保同时有两个人使用同一个手机号注册到我们的系统中,因此这里就需要在更深的层次去确保手机号的唯一性了。不同存储方案,解决方式不一样,这里以MySQL为例,我…

    2026年2月1日
    5
  • Java中TypeReference用法说明

    Java中TypeReference用法说明用途在使用fastJson时,对于泛型的反序列化很多场景下都会使用到TypeReference,例如:voidtestTypeReference(){List<Integer>list=newArrayList<>();list.add(1);list.add(9);list.ad…

    2022年6月15日
    69
  • java 接口一些记录

    java 接口一些记录

    2021年5月16日
    102
  • 考研数学一元函数微分学_考研数学微分方程

    考研数学一元函数微分学_考研数学微分方程 

    2025年6月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号