创建
字面量方式
var arr = []; var arr = ["成员1", 2];//可以是不同成员
构造函数方式
空的
var array = new Array();
指定长度
var array2 = new Array(10);
成员值都是undefined。此方式有技巧使用
虽然值是undefined,但join后不会出现undefined字符串
比如:
new Array(10).join('') // 依然返回空字符串 new Array(10).join('x') // 9个x new Array(10).join('<li></li>') // 9个li标签
length
可读写属性
读操作
都懂...略过
写操作
增操作(比之前多):相当于末尾追加了成员,初始值为undefined
减操作(比之前少):少了多少相当于 末尾删了多少
数组对length属性进行减少的 写操作,成员真的减少了。
有时候想,length属性如果没真正删除,reverse反转后是不是能把删除的反过来?而实际上,
reverse反转操作正常(强调:正常指并没有把删掉的成员反转过来)
div1.innerHTML = array.length;
转换
字符串转数组-split
String.split([string])
给参情况
用字符串中指定子串 将 字符串 切割成 数组
'张,李,陈,黄'.split(',');//["张", "李", "陈", "黄"]
空字符串情况
将每个字符分割成数组
'张,李,陈,黄'.split('');//["张", ",", "李", ",", "陈", ",", "黄"]
不给参情况
返回只有原字符串一个成员的数组
'张,李,陈,黄'.split();//["张,李,陈,黄"]
数组转字符串-join
用指定字符串 将 数组 连接成 字符串
[
'张', '李', '陈', '黄' ].join('-');// '张-李-陈-黄'
不带参:
[
'张', '李', '陈', '黄' ].join();// '张,李,陈,黄'
似乎默认使用了逗号相连
也可以说是 直接将数组转换成字符串
数组length=1
['张'].join('-');// '张'
数组length=0
[].join('-').length===0;//true。看来是空字符串...
集合转数组-slice技巧
集合指的是那种有length属性的类数组对象
HTMLCollection 集合例子
eItems = [].slice.call(document.body.children, 0);
这种集合ie678不支持,参数3不会影响HTMLCollection集合
对象模拟 例子
var obj = {0: 0,1: 1,length: 10 }; var arr = [].slice.call(obj, 0); arr.lenght; // 10
这种支持包括ie6的所有。参数3如果给,将影响obj。不给或者负数都不影响
其他splice用法见 [splice增删详解]
数组转字符串-toString
arr.toString() 相当于 arr.join(',')
var arr = ['成员1', '成员2', {}]; arr.toString() //成员1,成员2,[object Object] arr.join(',') //成员1,成员2,[object Object]
增成员
追加
底部-push
array.push("烧饼1");
头部-unshift
array.unshift("烧饼0");
返回值
返回更改后的数组长度
指定位置增加
指定 索引位置增加
如原来位置存在元素,则覆盖。。。
var arr=[]; arr[3]=1; console.log(arr.length);// 4
删成员
使用delete操作符
删第一个
var arr=["张", "李", "陈", "黄"]; delete arr[0]; console.log(arr[0]);// undefined console.log(arr.length);// 4
删最后一个
var arr=["张", "李", "陈", "黄"]; delete arr[3]; console.log(arr[3]);// undefined console.log(arr.length);// 4
两个例子说明,只是把值换成了undefined了,length不变
但
使用for in无法循环出删掉的成员了,如果强行赋值undefined,又能循环出来,看来真删除了。
或者说这只是对象的特性而已,数组也是对象嘛
兼容性:包括ie6的所有
使用shift pop splice 删除
见 [取成员]
通过设置length
var arr=["张", "李", "陈", "黄"]; arr.length=1; console.log(arr);//["张"] 。真的就只有这么一个了!!
兼容性:包括ie6的所有
详情 见 [length] 写操作
改成员
根据索引覆盖操作。都懂...
var arr=['张', '李', '陈', '黄']; arr[0]='xx';
取成员
单个,一般获取
根据索引获取
var arr=['张', '李', '陈', '黄']; console.log(arr[0]); console.log(arr['0']);// 根据以前的笔记说firefox这样不行?反正现在是行了...
单个,带删除 的获取
取一个便少一个。将更改 原数组
取第一个
arr.shift();
取最后一个
arr.pop();
取指定
使用splice实现
var arr=['张', '李', '陈', '黄']; arr.splice(2, 1);// '陈'。取到了第3个成员 arr;// ['张', '李', '黄']
多个,带删除splice
取多个指定成员,取多少原数组便会减多少
Array.splice(开始索引,数量)
返回一个新数组,装载取到的成员
splice 增删详解
参考网址:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
语法
array.splice(start, deleteCount[, item1[, item2[, ...]]])
参数:
start 必须。起始索引,负数表示从尾部开始起始
deleteCount 必须(实测可以不带)。删除的个数(含第 start 位)
0或负数都表示不删除,一般用0
超出情况将删除index之后的所有成员
技术文档都说这个是必须,实测不带也可以,不带将删除start(包含start)之后的所有
itemN 可选,要增加的成员。将从 start 位置处增加。将把start位置以及后面的元素往后挤
返回值:
被删掉的成员组成的新数组
没有被删返回空数组
将更改原始数组:
deleteCount 删除、itemN 增加 将应用到原数组中。而被删除的成员将拼成一个新数组被返回
兼容:
包括ie6的所有
关于clone:
splice不能实现clone,arr.concat、arr.slice可以实现
slice 复制数组
可指定位置进行复制
语法
arr.slice(begin[, end])
参数
begin
开始索引,从0开始
可以是负数,负数情况 相当于 length + begin,相减后结果如果还是负数将视0为起始
包含,新数组将包含此位置的值
经测试此参数也是可选的,省略情况相当于arr.slice(0)
end
结束索引,从0开始
省略此参数将将一直取到原数组末尾
可以是负数,负数情况原理同begin一样
不包含,新数组将不包含此位置的值
小于或者等于begin 将 返回空数组,负数情况也如此
返回新数组
不更改原数组
完全复制
不带参或者 begin 为 0 即可实现完全复制
兼容性
包括 ie6 的所有浏览器
concat 合并数组
实现 合并 或者 追加。返回一个新数组
数组情况是合并,非数组是追加。
var arr = ['成员1', '成员2', '成员3'], arr.concat('成员4',['成员5'])// ["成员1", "成员2", "成员3", "成员4", "成员5"]
语法:
array.concat(value1, value2, ..., valueN)
参数:
valueN 可选,不带参将实现复制
关于合并:
就是将数组的所有子成员追加进来,相当于如果参数是数组,那么你当它没有中括号吧。
合并只限于子级, 如果子成员还是数组 ,不会再去合并,此数组将视为成员。
var arr = ['成员1', '成员2', '成员3'],arr2= ['成员4',['成员5']]; var newArr = arr.concat(arr2); console.log(newArr); // ["成员1", "成员2", "成员3", "成员4", ["成员5"]]
返回值:
合并后的数组
var arr = ['成员1', '成员2', '成员3'],arr2= ['成员4','成员5']; var newArr = arr.concat(arr2);console.log(arr); // ["成员1", "成员2", "成员3"] console.log(arr2); // ["成员4", "成员5"] console.log(newArr); // ["成员1", "成员2", "成员3", "成员4", "成员5"]
可实现clone
不带参即可
slice也可以实现clone
var arr = ['成员1', '成员2', '成员3']; var newArr = arr.concat();
兼容性:包括ie6的所有
sort 排序
默认排序,将按字符排序
不带参即可,升序,即小的在前面。
将更改原数组
汉字
的话根据 Unicode编码,并非按照拼音
['陈','张', '黄','李'].sort();//["张", "李", "陈", "黄"]
上例中,如果按照拼音,'陈'应该在最前才对。而输出字符对于的Unicode编码是 5F20 674E 9648 9EC4,这很明显
推想,估计所有字符,包括字母都是按照编码来的
字符排序探索
逐个字符进行对比(如果是数字,并非根据数量)
[100,99].sort()// [100, 99]
其实,如果看了下面的自定义排序,上例的结果感觉应该是这么来的。转字符串,再比较
'100'<'99'// true
自定义排序
下例实现数字排序。例子为降序。升序 将1 和 -1 调换即可
([2, 33, 12, 6, 3333]).sort(function (v1, v2) {if (v1 < v2) return 1;if (v1 > v2) return -1;return 0;// 不处理 })
强调:将更改原数组
有返回值
虽然更改了原数组,但还是有返回值,返回更改后的原数组,或者说返回原数组引用
reverse 数组反转
差不多就是将整个数组倒过来,第一个位置就是 最后一个成员了
arr.reverse();
toSource??
返回代表特定数组的数组常数,可以用来建立新的数组
valueOf??
取得数组值
数组类型判断