数组本质:

本质上数组是特殊的对象,因此,数组中可以放入任何类型的数据,对象,数组,函数都行

它的特殊性在于键名是按次序排列好的整数 从0开始,是固定的,不用指定键名

如果数组中的元素仍是数组,则为多维数组

数组可以先定义后赋值,也可以声明时即赋值

var arr = [];

arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c'; var arr = [
{a: 1},
[1, 2, 3],
function() {return true;}
]; arr[0] // Object {a: 1}
arr[1] // [1, 2, 3]
arr[2] // function (){return true;}

length属性 

返回数组的成员数量,可通过调整length控制数组的大小

Js中的数组是动态的可随时增删,length总是键名中的最大整数加1

由于数组本质上是一种对象,所以可以为数组添加属性,但不影响length的值

var a = [];

a['p'] = 'abc';
a.length // 0 a[2.1] = 'abc';
a.length // 0

如果数组的键名数值超出范围,该键名会自动转换为字符串

数组的遍历

可以用for...in

不过会遍历到非整数键名

因此用for,while或forEach

数组的空位

当数组的某个位置是空元素,即两个逗号之间没有任何值,称数组存在空位,空位不影响length属性

数组的空位是可以读取的,返回undefined

使用delete命令删除一个数组成员,会形成空位,且不会影响length属性

var a = [1, 2, 3];
delete a[1]; a[1] // undefined
a.length // 3

然而空位与一开始定义为undefined是不一样的

使用数组的forEach,for...in,Object.keys方法进行遍历,空位会被跳过,undefined不会  

类似数组的对象

如果一个对象的所有键名都是正整数或零,并且有length属性,那么语法上称“类似数组的对象”

array like object

根本特征在于有length属性,但不是动态的

典型的类似数组的对象是函数的arguments对象,以及大多数DOM元素集,还有字符串

// arguments对象
function args() { return arguments }
var arrayLike = args('a', 'b'); arrayLike[0] // 'a'
arrayLike.length // 2
arrayLike instanceof Array // false // DOM元素集
var elts = document.getElementsByTagName('h3');
elts.length // 3
elts instanceof Array // false // 字符串
'abc'[1] // 'b'
'abc'.length // 3
'abc' instanceof Array // false

可以通过某些方法把类似数组的对象变成真正的数组

1.数组的slice方法

var arr = Array.prototype.slice.call(arrayLike);

2.通过call()把数组的方法放到对象上面 

Js学习(3) 数组的更多相关文章

  1. 【JS学习】数组过滤方法的使用filter

    前言:本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 使用效果: 可以返回参数函数为真的值 //情景:实现从stu数 ...

  2. JS学习笔记-数组

    ECMAScript中没有提供类和接口等的定义,但它却是一门面向对象的语言,由于它能够通过其它 方式实现类似高级语言的面向对象功能,这些内容将在后面的文章中进行一步步的总结.此篇仅对JS中对象作简要说 ...

  3. js学习篇--数组按升序降序排列

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. js学习笔记——数组方法

    join() 把数组中所有元素转化为字符串并连接起来,并返回该字符串, var arr=[1,2,3]; var str=arr.join("#"); //str="1# ...

  5. 【学习】js学习笔记---数组对象

    一.属性 length 数组的大小.数组的length属性总是比数组中定义的最后一个元素的下标大一,设置属性length的值可以改变数组的大小.如果设置的值比它的当前值小,数组将被截断,其尾部的元素将 ...

  6. JS学习笔记——数组去重

    <script type="text/javascript"> //indexOf"是ECMAScript5方法,IE8以下不支持,需多写兼容低版本浏览器代码 ...

  7. JS学习之数组

  8. js学习篇1--数组

    javascript的数组可以包含各种类型的数据. 1. 数组的长度 ,直接用 length 属性; var arr=[1,2,3]; arr.length; js中,直接给数组的length赋值是会 ...

  9. 前端学习之——js解析json数组

    ** 前端学习之——js解析json数组** 解析json数组即对JSONArray的遍历 一.对于标准的json数组如: var result=[{"flag":1," ...

随机推荐

  1. 【DB2】SQL1585N 由于没有具有兼容页面大小的可用系统临时表空间,因此无法创建临时表。SQLSTATE=54048

    自己写了一段SQL,SQL中包含ORDER BY 字句,但是在执行的时候报错如下: 经过查询发现是由于临时表空间的PAGESIZE不够大,可考虑建16k或者32k PAGESIZE的表空间 示例如下: ...

  2. C# 调用打印机 打印 Excel

    打印 Excel 模板 大体思路,通过NPOI操作Excel文件,通过Spire将Excel转成图片,将图片传给系统打印. Spire是收费工具,在微软库中下载Free版本. #region 打印所用 ...

  3. PostgreSQL获取所有表名、字段名、字段类型、注释

    转载自:http://blog.csdn.net/cicon/article/details/51577655 获取表名及注释: select relname as tabname,cast(obj_ ...

  4. spring找不到bean

    有时候明明有bean,spring找不到bean,这时候需要mvn clean下,有时候xml文件不会每次都编译,改了不clean可能不会生效.

  5. [蓝桥杯]ALGO-20.算法训练_求先序排列

    问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所求 ...

  6. 报错:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.

    报错环境: CDH中集成的hive服务,启动报错,所以初始化一下元数据. 配置文件:/etc/hive/conf hive-site.xml 命令目录:/opt/cloudera/parcels/CD ...

  7. Windows10关闭自动更新

    1 使用windows+r调出运行,输入:services.msc2 找到Windows update,右键选择属性:将启动类型从自动改为手动.3 使用windows+r调出运行,输入:gpedit. ...

  8. Vue 爬坑之路(一)—— 使用 vue-cli 搭建项目

    vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli vue ...

  9. (dev mode) install CONSUL on ubuntu

    WSL: V18.04.1 1. install $sudo apt-get update$sudo apt-get install consul wsl1017@DESKTOP-14G6K9S:~$ ...

  10. 团队第二次 # scrum meeting

    github 本此会议项目由PM召开,召开时间为4-3日晚上9点 召开时长15分钟 任务表格 袁勤 学习SpringBoot https://github.com/buaa-2016/phyweb/i ...