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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dataframe填充缺失值_pandas填充空值

    dataframe填充缺失值_pandas填充空值如果单独是>>>df.fillna(0)>>>print(df)#可以看到未发生改变>>>print(df.fillna(0))#如果直接打印是可以看到填充进去了>>>print(df)#但是再次打印就会发现没有了,还是Nan将其Nan全部填充为0,这时再打印的话会发现根本未填充,这是因…

    2022年8月12日
    5
  • Pytest(13)命令行参数–tb的使用[通俗易懂]

    Pytest(13)命令行参数–tb的使用[通俗易懂]前言pytest使用命令行执行用例的时候,有些用例执行失败的时候,屏幕上会出现一大堆的报错内容,不方便快速查看是哪些用例失败。–tb=style参数可以设置报错的时候回溯打印内容,可以设置参

    2022年7月28日
    7
  • 并发编程之线程中断interrupt

    并发编程之线程中断interrupt

    2021年8月3日
    75
  • aorg.gjt.mm.mysql.Driver和com.mysql.jdbc.Driver的关系

    aorg.gjt.mm.mysql.Driver和com.mysql.jdbc.Driver的关系今天写项目时,发现mysql驱动是 aorg.gjt.mm.mysql.Driver ,以前还真的没有见过,真是见识太少,于是记录一下。 com.mysql.jdbc.Driver的前身是org.gjt.mm.mysql.Driver,现在主要用com.mysql.jdbc.Driver,但为了保持兼容性保留了org.gjt.mm.mysql.Driver这个路径的引用。…

    2022年6月13日
    24
  • 安全多方计算(MPC)从入门到精通:Frutta语言

    安全多方计算(MPC)从入门到精通:Frutta语言

    2022年4月3日
    43
  • freeswitch之呼叫中心acd模块开发

    freeswitch之呼叫中心acd模块开发一、定义:ACD(AutomaticCallDistributor)自动呼叫分配,也叫智能选择座席。它是呼叫中心整个前台接入系统逻辑功能的描述:把接入的呼叫转接到正确的座席员桌前。ACD是现代呼叫中心有别于一般的热线电话系统和自动应答系统的重要标志,其性能的优劣直接影响到呼叫中心的效率和顾客的满意度。二、ACD包含的功能点:1、程控交换功能ACD在本质上也是交换机的一种类型,必须具有程控交换最基本的话务交换功能。2、排队功能ACD必须具有话务排队的功能,所谓排队是指在内线都

    2022年7月14日
    22

发表回复

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

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