JS里的数组其实并不是一个数组,它其实是一个对象,a[1]这种调用方式其实就是一个字面量为1的属性。

因为这东西实际上是一个对象,所以你就可以理解下面这种声明了吧!

var arrName=['我可以是一个字符串',1,true,null,undefined,[1,'23'],{name:'123'},NaN,Infinity];

关于数组长度

  • 数组长度:arrName.length。
  • 数组长度没有上界,如果你用一个大于length的数组下标来存储一个元素,那么数组长度会变大以容纳新元素,不会发生越界错误。
  • 数组的length其实并不是表示数组的元素个数,它实际上表示的是数组的最大整数下标+1。
  • var arrName=[]
    arrName[10000]=1;

    就比如上面这段代码中arrName.length为10001,但是实际上你知道的,它只有一个元素。

  • 给arrName.length赋值,如果大于当前值,也不会分配更多空间,如果小于当前值,比如新值为100,会导致下标大于且等于100的的元素被删除掉。

关于数组元素的删除

  • 前面讲到对象的删除为 delete obj.name或者 delte myObj["name"],而又说道数组其实是一个对象那么当然也是可以delete arrName[2];
  • 但是你要知道delete方法过后arrName[2]成了undefined,但是arrName[1]和arrName[3]值不变
  • 然而我们脑海中的数组元素的删除通常是想要arrName[3]前移去替代arrName[2]的位置
  • 所以JS提供了splice这种方法,arrName.splice(2,3),就是删除下标为2的元素开始的三个元素。当然对于大型数组来说效率不高。
  • var arrName=[1,2,3,4,5,6];
    arrName.length=50
    arrName.splice(2,3);//删除后数组为[1,2,6,undefined。。。],arrName.length为47

关于判断一个值是否为数组 

var isArray=function(value){
return value && typeof value==='object' && value.constructor===Array;
};

但是上面的方法在识别不同窗口或frame里构造的数组时会失败,所以下面有一种更好的方法

var isArray=function(value){
return Object.prototype.toString.apply(value)==='[object Array]';
};

好吧,这种鬼东西记在这里就得了,别记在脑子里,毕竟容量有限。

关于数组的属性与方法

前面说过了,数组实际上就是对象。那么给数组添加方法和属性都可以像对象那样。

有一点要注意的是,arrName.myName这种属性添加后,arrName.length并没有改变,因为这并不是一个整数类型的属性

【JS复习笔记】04 数组的更多相关文章

  1. JS自学笔记04

    JS自学笔记04 arguments[索引] 实参的值 1.对象 1)创建对象 ①调用系统的构造函数创建对象 var obj=new Object(); //添加属性.对象.名字=值; obj.nam ...

  2. 【JS复习笔记】02 对象与函数

    好吧,因为很重要的事情,几天没写笔记了. 关于对象: ||可以用来填充默认值,如:myApp.name || "无" &&可以用来避免错误,myApp.NameOb ...

  3. PHP学习笔记04——数组

    <?php // 1.数组的声明,可以直接为数组元素赋值,也可以使用array函数声明数组 /* 索引数组:下标从0开始,依次递增 * 关联数组:字符串为下标 * */ //直接赋值声明数组,不 ...

  4. Spring MVC 复习笔记04

    复习 springmvc框架: DispatcherServlet前端控制器:接收request,进行response HandlerMapping处理器映射器:根据url查找Handler.(可以通 ...

  5. 【JS复习笔记】07 复习感想

    好吧,其实<JavaScript语言精粹>后面还简单介绍了代码风格,优美特性,以及包含的毒瘤.糟粕. 但我很快就看完了,发现其实都在前面讲过了,所以就不写了. 至今为止已经算是把JavaS ...

  6. 【JS复习笔记】05 正则表达式

    好吧,正则表达式,我从来没记过.以前要用的时候都是网上Copy一下的. 这里还是扯一下吧,以后要是有要用到的正则表达式那么就收集到这个帖子里.(尽管我认为不会,因为我根本就不是一个专业的前端,我只是来 ...

  7. 【JS复习笔记】01 基本语法

    数字: JS只有一种数字类型,相当于double.(不知道为什么,我每次打double输入法都会出现逗比了三个字) NaN是一个数值,可以用isNaN(number)检测NaN Infinity表示所 ...

  8. 【JS复习笔记】03 继承(从ES5到ES6)

    前言 很久以前学习<Javascript语言精粹>时,写过一个关于js的系列学习笔记. 最近又跟别人讲什么原型和继承什么的,发现这些记忆有些模糊了,然后回头看自己这篇文章,觉得几年前的学习 ...

  9. JavaScript语言精粹 笔记04 数组

    数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...

随机推荐

  1. android Animation 动画绘制逻辑

    参考:http://www.jianshu.com/p/3683a69c38ea 1.View.draw(Canvas) 其中步骤为:/* * Draw traversal performs seve ...

  2. 水晶报表设置FiledObject支持HTML格式的数据

    经常遇见把数据拼接成html格式后,然后在水晶报表中按照这种格式进行展现. 这就需要我们对次FiledObject设置成html文本: 设置方式: 格式编辑器->段落->文本解释,然后选择 ...

  3. Spring3 MVC请求参数获取的几种方法

    Spring3 MVC请求参数获取的几种方法 一.      通过@PathVariabl获取路径中的参数 @RequestMapping(value="user/{id}/{name}&q ...

  4. MariaDB Galera Cluster 10.1 只支持 LINUX ?!

    MariaDB Galera Cluster  (MariaDB 10.1) 当前只支持:LINUX ! 参考: https://mariadb.com/kb/en/mariadb/getting-s ...

  5. C# barcode生成代码

    protected void Page_Load(object sender, EventArgs e) { string code = Request.Params["code" ...

  6. asp.net首页设置

    在web.config中设置首页 <configuration> <system.web> <compilation debug="true" tar ...

  7. C#、.NET网络请求总结(WebClient和WebRequest)

    1.关于WebClient第三方的封装,支持多文件上传等 using System; using System.Collections.Generic; using System.Text; usin ...

  8. jQuery easyui 之 expend row

    http://www.jeasyui.com/tutorial/datagrid/datagrid21.php

  9. Android开发中内存和UI优化

    1.内存||效率 GC这东西对于开发人员用起来比较爽,但对于技术总监或产品总监来说,他们并不在乎,在乎的是用户运行App的流畅度,待你开发完了,笑眯眯的走过来,让你测试N个适配器,烦都烦死你. 说到这 ...

  10. linux 环境变量设置及查看

    1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ ech ...