类数组对象啊,被人问到它跟真正的数组对象有什么差别啊?说不上来就老埋汰了,只知道函数的arguments对象是个类数组对象,也有length属性,其他呢?干货奉上:

首先先说说数组吧:

1,当有新的元素添加到列表中时,会自动更新length属性。

2,设置length为一个较小值将截断数组。

3,从Array.prototype中继承一些有用的方法。

4,其类属性为“Array”。

这些类数组对象可以进行遍历,但是不能使用数组方法,也不用期望length属性有什么特殊的行为,看看类数组对象是怎么生成的吧?

 var a = {};
var i = 0;
while(i<10){
a[i] = i*i;
i++;
}
a.length = i; var total = 0;
for(var j = 0;j<a.length;j++){
total += a[j];
}

这里其实生成了一个对象a,里面有key,value的键值对,key值是从0到9,还有一个length属性,这个length属性是定义好的,除非手动更新,否则不变的。

之前函数的arguments对象就是一个类数组对象,在客户端javascript中,一些DOM的方法:如document.getElementsByTagName()的结果也是返回类数组对象。如何检测类数组对象呢?

首先先确定是个对象,不是null或者undefined,它的length是有限非负整数,typeof o === 'object';

好像数组也符合这个,因为类数组对象没有继承Array.prototype,应该再加上Object.prototype.toString.call(o) !== 'Array',就是个类数组对象了。

划重点!!!来来来!!!

虽然类数组对象没有继承Array.prototype,没有什么join,slice,pop,push等等方法,但是忘记call和apply神器的用法了么?代码如下:

var a = {"0":"a","1":"b","2":"c","3":"d",length:4};
Array.prototype.join.call(a,'+'); //"a+b+c"
Array.prototype.slice.call(a,0) //['a','b','c','d'],真正数组的副本啊

这里出个题了,怎么将一个类数组对象转化为一个真正的数组对象???

答案就是:a = Array.prototype.slice.call(a,0),再用Array.isArray(a)检测类型,true,哈哈哈哈

Part two:作为数组的字符串

字符串的行为类似于只读数组,除了用charAt()访问单个字符以外,还可以用方括号[]:

var s = 'test';
undefined
s.charAt(0) === s[0]
true

方括号代替charAt()更加简洁,可读并且高效。

也可以用数组的方法应用在字符串上面:

Array.prototype.join.call(s,",")

"t,e,s,t"
注意:字符串是不可变值,当做数组看待时候,只读。所以,push,sort,reverse,splice等在字符串上面是无效的。而且尝试用会报错。

JavaScript的类数组的更多相关文章

  1. JavaScript arguments类数组

    1. 什么是类数组 arguments 是一个类数组对象.代表传给一个function的参数列表.  我们来传一个实例. function printArgs() { console.log(argu ...

  2. javascript:类数组 -- 对象

    在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 类数组:本质是一个对象,只是这个 对象  的属性有点特殊,模拟出数组的一些特性. 一般来说,如果我们有一个 ...

  3. javascript中关于数组的一些鄙视题

    一.判断一个数组中是否有相同的元素 /* * 判断数组中是否有相同的元素的代码 */ // 方案一 function isRepeat1(arrs) { if(arrs.length > 0) ...

  4. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  5. Javascript 类数组(Array-like)对象

    Javascript中的类数组对象(Array-like object)指的是一些看起来像数组但又不是数组的对象.Javascript中的arguments变量.document.getElement ...

  6. JavaScript类数组对象参考

    JavaScript和DOM中有很多类数组对象,它们有以下特点 1.有length属性 2.可以使用[]通过下标访问 3.部分类数组对象使用[]访问成员时不只可以使用下标,还可以使用id或name 4 ...

  7. 浅谈JavaScript和DOM中的类数组对象

    JavaScript是一门弱类型语言,它的数据类型分为两大类:简单数据类型(5种:Undefined.Null.Boolean.Number.String)和复杂数据类型(1种:Object).Obj ...

  8. javascript 类数组对象

    原文:https://segmentfault.com/a/1190000000415572 定义: 拥有length属性,其他属性(索引)为非负整数(对象中的所有会被当做字符串来处理,这里你可以当做 ...

  9. JavaScript数组&类数组转换

    一.数组 在JavaScript中数组可以容纳任何类型的值,可以是数字.字符串.对象.甚至其他数组(多为数组) var a = [1,'2',[3]]; a.length;//3 a[0];//1 a ...

随机推荐

  1. Amsterdam Distance

    题目描述 Your friend from Manhattan is visiting you in Amsterdam. Because she can only stay for a short ...

  2. Linux quota磁盘配额

    quota:磁盘配额 限制某一群组所能使用的最大磁盘配额 限制某一用户的最大磁盘配额 使用限制: 仅能针对整个filesystem 核心必须支持quota quota的记录文件 只对一般身份使用者有效 ...

  3. 转载-Apache和Nginx运行原理解析

    本文只作为了解Apache和Nginx知识的一个梳理,想详细了解的请阅读文末参考链接中的博文. Web服务器 Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览 ...

  4. AngularJS中格式化日期为指定格式字符串

    var date = $filter('date')(new Date(),'MM/dd/yyyy');

  5. markdown直接粘贴截图

    通过代码方式 cmd markdown粘贴截图 https://www.jianshu.com/p/ae048b5090f8

  6. 吴裕雄--天生自然python学习笔记:Python3 JSON 数据解析

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. Python3 中可以使用 json 模块来对 JSON 数据进 ...

  7. spring5.0.7.RELEASE配置jackson2.9.5

    概述 Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”. 1.环境: jdk版本:jdk1.8spring版本:5.0.7.RELEASE jackso ...

  8. absorb|state|

    ADJ-GRADED 极感兴趣的:专心的:全神贯注的If you are absorbed in something or someone, you are very interested in th ...

  9. 千万不要在module里扩展较多逻辑,很容易引起项目异常。

    NOP项目 为保持紧跟NOP更新,项目组坚持不改NOP源码. 以触发器,插件化开发为拓展模式 NOP自定义好的接口或完全独立的新拓展功能很容易插件化. 但部分功能要在NOP原项目上扩展修改在不改源码的 ...

  10. 吴裕雄--天生自然KITTEN编程:救救小兔子