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


相关推荐

  • python爬12306并买票_python开发12306抢票

    python爬12306并买票_python开发12306抢票说明文字:1.本项目只是一个练习,熟悉python爬虫技术,没有任何用途2.最后运行的结果有时候会成功,有时候会显示错误界面,如下图所示。因为12306怎么可能允许你一直爬它呢准备工作:项目结构:…

    2025年6月21日
    3
  • 设计模式—工厂方法

    设计模式—工厂方法

    2022年1月18日
    52
  • JAVA——Tess4J简单的图像识别DEMO

    JAVA——Tess4J简单的图像识别DEMO基本概念TesseractOpenSourceOCREngine:包含一个OCR引擎-libtesseract和一个命令行程序-tesseract。Tesseract4添加了一个新的基于LSTM的OCR引擎,该引擎专注于行识别,但仍支持Tesseract3的传统TesseractOCR引擎,该引擎通过识别字符模式进行工作。通过使用传统OCR引擎模式(–oem0),可以与Tesseract3兼容。它还需要训练有素的数据文件来支持旧式引擎,例如tessdata存储库中的文件。…

    2022年6月5日
    79
  • mysql8.0jar包及驱动

    mysql8.0jar包及驱动<?xmlversion=”1.0″encoding=”UTF-8″?><projectxmlns=”http://maven.apache.org/POM/4.0.0″xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”xsi:schemaLocation=”http://m…

    2022年5月15日
    61
  • 某天擎取消密码_360天擎默认密码

    某天擎取消密码_360天擎默认密码1.出于公司原因,很多会要求下载某信天擎,但是退出或者卸载的时候总会让你输入密码,这种流氓行为是可耻的,以下是取消密码的方式:注:本人电脑win11系统win10尝试杀掉后台进程在修改:进程名如图(个数未必和我相同全部杀掉即可)本次选择的方式为修改本地文件(1)找到文件路径如图所示:(如果忘记软件安装路径请看文章最后附有查看方式)(2)打开文件:拉到最底部等号后边全部删除删除后:查看安装路径的方式1.选中快捷方式单击右键选择属性(选中位置就是安装路径..

    2022年9月2日
    3
  • matlab一阶惯性滤波,为什么一阶惯性环节也具有滤波的作用

    matlab一阶惯性滤波,为什么一阶惯性环节也具有滤波的作用在用simulink搭建模型的时候,发现一阶惯性环节具有滤波的作用,这是为什么呢?我们以一阶惯性环节200pi/(s+200pi)为例进行说明。首先从传递函数G(s)的频率特性说起。所谓系统的频率特性,是指系统在单位正弦相量作用下的稳态响应。因此,令传递函数中的s=jw,就可以得到系统的频率特性G(jw)。G(jw)是频率w的复变函数。他的幅值为|G(jw)|,相角为相角(G(jw))。当w从0到…

    2022年10月5日
    11

发表回复

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

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