-数组
数据不需要保持一致性,是object的类型,中间被省略的元素是object的类型的。
var arr = [9,8,7];
typeof arr;//object 类型
//调用构造函数
var arr = new Array(5);//数组的默认长度
var arr = new Array(3,4,'foo');//数组的元素,输出值为3,4,foo
var arr = new Array('5');//数组元素 输出值为5
数组可以访问超过数组的length。并且可以赋值超过长度的值。长度限制为2的32次方
var arr =[1,2,4]
arr[100] // 值为undefined
数组枚举
for in /for each in 可以枚举数据,但是无法保证枚举顺序。
arr.forEach(function(e){print(e)})
数组排序,通过unicode码进行排序
var arr =['one','two','three']
arr.sort();//值变成['one','three','two']
数组拼接和分割
arr.join()//括号向不填的话默认以,拼接
str.split(分割字符/正则表达式)
数组的复制
js的深复制:如果对象的属性还引用的其他对象,则对象也会别复制过来
js的浅复制:只复制属性值和元素
好像跟java有点不一样????
var arr =[3,4,5]
var arr2 = [].concat(arr);
arr2[0] =1//arr2 =[1,4,5] arr = [3,4,5]
var arr3 = arr.slice(0,arr.length)
arr3[0]=1//结果同arr2
var arr4 = [{X:1}]
var arr5 = [].concat(arr4)
arr5.X =3//arr4结果为[{X:3}],arr5的结果为[{X:3}]
数组删除
var arr = [1,2,3,4]
delete arr[2]//1,2,,3
arr.splice(2,1)//从下标为2的位置其删除一个元素 1,3,4
数组的筛选
arr.map(function(e){return e.length}).filter(function(e) {return e%2==0})
数组的内部实现
由于是对象,所以实现方式并不是一段连续的内存空间
数组风格的对象
var aarr = {0:'zero',1:'one',2:'two',length:3}
aarr.join(',')
//Uncaught TypeError: aarr.join is not a function
Array.join(',',aarr)
//VM984:1 Uncaught TypeError: Array.join is not a function
事实证明不行,等我以后来看看什么原因
Array.prototype.join.call(aarr,',')
//"zero,one,two"
迭代器和控制器,没看懂,页码为148左眼皮
数组对象的意义
{},[] 两者的区别:
[]的length 属性的enumerable 属性
[]这个length 属性会自动增加,既超过数组长度的下标进行赋值。
{}只能通过push方法获取unshift方法。
JSON
JSON 能通过4种基本类型和2种结构化数据
字符串,数值,布尔,null
对象,数组
var s ='{"X":1,"Y":2,"val":"foolBar"}'
var obj =JSON.parse(s)
//{X: 1, Y: 2, val: "foolBar"}
JSON.stringify(obj)
//"{"X":1,"Y":2,"val":"foolBar"}"