(一) Js 数据类型
分为基本数据类型以及引用类型
基本数据类型有 null,undefined,Boolen,Number,String,还有一种复杂数据类型 Object。
var var1 = "xianrongbin", var2 = false, var3 = null, var4 = undefined, var5 = 123; console.log(typeof var4); var var6 = [1, 23, 5]; console.log(typeof var6);
这里,其实只需一个var的,为了区别基本数据类型与复杂数据类型,写了两个var 关键字。
将所有的变量定义在一个var后面,有益提升程序运行效率。
如果在一个函数中,不标注 var,则该变量是全局变量,是window的变量,因为所有全局变量都是由window承担的。
function testVar() { num = 1; } testVar(); console.log(window.num);
这里输出1,如果在 "num" 前加上var,输出则会报错。
基本数据类型与值类型,一个是传值,一个是改变地址。

var var6 = [1, 23, 5]; function changeValue(obj) { obj.pop(); }; changeValue(var6); console.log(var6); var num = 1; function changeNum(num) { num = num + 1; }; console.log(num);
输出的值是 [1,23] 1。 这点很重要。 这里于C#有很大的不同。
(二) 数组操作
数组类型是Object,数组是值得有序集合。
每个值叫做元素,每个元素在数组中都有数字位置的编号,即索引。
数组是弱类型的,数组中可以含有不同类型的元素。
var arr=[1,'2',[1,2],null]
数组中允许最后面有一个多余的 ‘,’,
var arr1=[,,] --undefined,undefined
1、数组最大长度
最大长度是 2^23-1
2、创建数组
var arr=new Array();
var arrWidthLength=new Array(1000);
var arrLikesLiteral=new Array(1,2,3);
--new 其实是可以省略的
3、数组元素的增删
数组是动态的,无需指定大小
arr[arr.length] --尾部添加一个元素
arr.length-=1 --删除尾部元素
若要 往数组尾添加一个或多个元素,可用push(),
删除最后一个元素,可用pop(),
删除数组头一个元素,可用shif(),
delete arr[2] --第三个元素索引不存在,仍然会存在这个位置,值为undefined
向数组头添加一个或多个元素,可使用unshift,

var testArry = [1, 2, 3, 4, 5, 6]; testArry.push(7); testArry.pop(); testArry.shift(); testArry.unshift('unshift1', 'unshift2'); concatArry= testArry.concat('concat1'); var index = testArry.indexOf('concat1'); testArry.splice(index, 1); testArry.splice(0, 1, 'replace1','replace2');
结果是: ["replace1", "replace2", "unshift2", 2, 3, 4, 5]
4.数组迭代
我们可以使用
for(i in arr) { console.log(arr[i]);
如果我们在数组的prototype添加属性a=‘testa',则输出时也会输出 testa
因此需要判断 if(arr.hasOwnProperty(i)) { }
5.稀疏数组
稀疏数组并不含有从0开始的连续索引,一般length属性值比实际元素个数大。
var arr1=[undefined];
var arr2=new Array(1);
0 in arr1;---true 0 in arr2; ---false
arr1.length=100; arr1[99]=123; 99 in arr1; --true 98 in arr1; --false
6.五个迭代函数
这五个迭代函数是.every .some .filter .forEach .map他们都有三个参数(item,key,value),key是从0开始计数,后两个参数可选用。
. every() 对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true
. some() 对数组中的每一项运行给定的函数,如果该函数对任意一项返回true,则返回true
. filter() 对数组中的每一项运行给定的函数,返回该函数返回true的项组成的数组,不会影响原函数
. forEach() 对数组中的每一项运行给定的函数,这个方法没有返回值
. map() 对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组,不会影响原函数
用法如下
var testArry = [1, 2, 3, 4, 5, 6]; var isAllBig2 = testArry.every(function (item) { return item > 2; }); console.log(isAllBig2); var isSomeBig2 = testArry.some(function (item) { return item > 2; }); console.log(isSomeBig2); var filterArray = testArry.filter(function (item) { return item > 2; }); console.log(filterArray); var mapArray = testArry.map(function (item) { return item + 2; }); console.log(mapArray); var forEachResult = testArry.forEach(function (item) { if (item >5) { console.log(item); } });
其中,.forEach是无返回值,而其他几个是有返回值的,这点需要注意。
上述输出结果分别是