类数组对象啊,被人问到它跟真正的数组对象有什么差别啊?说不上来就老埋汰了,只知道函数的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. idea生成serialVersionUID

    默认情况下Intellij IDEA不会提示继承了Serializable接口的类生成serialVersionUID的警告.如果需要生成serialVersionUID,就要在Preferences ...

  2. android愤怒小鸟游戏、自定义View、掌上餐厅App、OpenGL自定义气泡、抖音电影滤镜效果等源码

    Android精选源码 精练的范围选择器,范围和单位可以自定义 自定义View做的小鸟游戏 android popwindow选择商品规格颜色尺寸效果源码 实现Android带有锯齿背景的优惠样式源码 ...

  3. The Pomodoro Technique

    目录 简介 What to solve How to use Some applications 自我总结 结束语 简介 番茄工作法是简单易行的时间管理方法,是由弗朗西斯科·西里洛于1992年创立的一 ...

  4. 玩转SpringBoot用好条件相关注解,开启自...

    官方提供的常用条件注解 因为Spring的核心是基于bean的,所以这些条件注解主要是影响bean的注册. 因为注册的bean不同了,最后对外呈现的行为就不同了.不就是自动配置了. 一.最常用的应该是 ...

  5. FPGA模N计数器的实现

    module ModuloN_Cntr(Clock, Clear, Q, QBAR); , UPTO = ;//计数器位数以及模数 input Clock, Clear; :]Q, QBAR; :]C ...

  6. 2015-09-23-Archlinux的一些配置

    firefox的flash插件 pacman -S flashplugin firefox上网慢 由于Chromium浏览器,打字的时候经常会跳字母,所以就换了firefox浏览器,但是FF上网的时候 ...

  7. volatile与Synchronized

    摘自: https://blog.csdn.net/zxh476771756/article/details/78685581 一.JVM内存模型: JVM将内存组织为主内存和工作内存两个部分. 主内 ...

  8. 3DSMAX安装未完成,某些产品无法安装的解决方法

    3DSMAX提示安装未完成,某些产品无法安装该怎样解决呢?,一些朋友在win7或者win10系统下安装3DSMAX失败提示3DSMAX安装未完成,某些产品无法安装,也有时候想重新安装3DSMAX的时候 ...

  9. 如何创建Hexo站点的Tags和Categories默认页面

    安装Hexo的categories生成插件 1 $ npm install hexo-generator-category --save 安装Hexo的Tags生成插件 1 $ npm install ...

  10. 吴裕雄--天生自然python学习笔记:Python3 面向对象

    Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集 ...