ECMAScript中的数组能够说是比较神奇了, ECMAScript中定义的数组每一项能够保存不一样的数据类型,如第一项为字符串,第二项为数值等等数组
1. 那怎么建立一个数组呢?浏览器
方法和建立对象实例相似框架
(1)经过new + 构造函数建立。此处的构造函数就是Array了函数
即 var arr = new Array()spa
也能够传递参数 var arr = new Array(20) 则数组长度为20对象
或者传递字符串 var arr = new Array('a','b')此处建立了包含2个字符串值的数组ip
使用Array 构造函数时也能够省略new 操做符字符串
(2)用字面量形式建立数组构造函数
var color = ['red', 'blue']; //建立包含两个字符串的数组数据类型
var name = []; // 建立空数组
var arr = [1,2,]; // 建立包含两项或三项的数组
var p = [,,,,,]; //建立包含5/6项的数组
前两种好懂,解释一下最后两种
为何会有两种可能,缘由是不一样浏览器的理解不一样,在IE8以前,会认为第三种建立了 项为1,2和undefined的数组
在其余浏览器中,会认为建立了1和2两项
同理 ,最后一种也是这样
可是要注意了,省略值的每一项都会得到undefined值
2. 数组的length 可变
如 var arr = [1,2]
arr[2] = 3
此处数组的长度为2,而要访问第三项,此处会默认为数组添加一项,长度变为3
反之,若是将数组长度设置为1
arr.length = 1;
则数组的最后一项会被删除,再访问arr[1] 输出undefined
若arr.length = 4; 超出原来长度了,则多余的项都会得到undefined值
3. 检测数组
如何检测一个对象是否是数组呢?
if(value instanceof Array) {
// 操做..
}
instanceof操做符的问题在于,它只有一个全局执行环境
若网页中包含多个框架,则有多个不一样全局执行环境
从而存在多个版本的Array构造函数
若是你从一个框架向另外一个框架传递数组,那么传入的数组和第二个框架原生的数组构造函数不同
为了解决这个问题,ECMAScript 新增了Array.isArray()方法,目的是肯定这个值是否是数组,不限于执行环境
4.转换方法
主要是数组转为字符串;若数组中值为null或undefined ,转换时返回空字符串
一般能够用toString()方法,返回每一个值的字符串形式用逗号拼接起来
可是更经常使用的是join()方法
接受一个参数,即用做分隔符的字符串;不传递参数默认为逗号
['a','b','c'].join('+') //返回 a+b+c