JS之数组
1.数组的定义:
(1)字面量: var arr = [1, 2, 3];
(2) new: var arr = new Array(1, 2, 3);(using new and don't using new is same) (注意:当括号内只有一个数字值,若为整数则该数字表示数组的长度而不是数组中的元素,若为浮点数则报错)
2.数组的读和写:
(1) 不可溢出输出的长度读,否则返回undefined,但不报错 var arr = new Array(1, 2, 3); document.write(arr[4]);//返回undefined
(2) 可以溢出写 var arr = new Array(1, 2, 3); arr[5] = 6; document.write(arr);//返回1,2,3,,,6
3.数组的一些方法:
(1) 改变原数组的方法: arr.方法()
a. reverse 翻转数组 var arr = [1, 2, 3]; arr.reverse(); document.write(arr);//3,2,1
b. push 在数组末尾一次性添加一个或多个个新元素 var arr = new Array(1, 2, 3); arr.push(4, 5);
c. pop 在数组末尾剪切一个元素,并将之返回 var arr = new Array(1, 2, 3); arr.pop(); document.write(arr);//1,2
d. shift 在数组头部剪切一个元素,并将之返回
e. unshift 在数组头部一次性添加一个或多个元素
f. splice 在数组的某个位置,删除自定义个数目的元素,并可在剪切的位置添加新元素 var arr = new Array(1, 2, 3, 4); arr.splice(2, 2, 10, 11);//从arr数组的第二个位置开始删除两个元素,并将10和11一次添加到删除的位置。注意:删除后可添加可不添加
g. sort 将数组的元素排序,默认为按ASCII码排序,也可默认为升序。该方法的排序方式自定义:
1 arr.sort(function (a, b){ 2 返回 负数;//a在b前面 3 返回 正数;//a在b后面 4 })
一个有关sort的考试题:利用sort将一个排好序的数组随机乱序:
利用Math.random()产生0到1之间不包括0和1的随机小数和sort来乱序
arr.sort(function(a, b){
return Math.random() - 0.5;
})
(2)不可改变数组的方法:
a. concat arr1.concat(arr2);将arr2接到arr1之后形成一个新数组并返回,arr1 和arr2原数组不变
b. join 将数组中各元素用join括号中参数连接形成一个String并返回,原数组不变 var arr = [1, 2,3]; var str = arr.join('-');document.write(str);//1-2-3
1 经验:连接多个字符串时,用join会比加号更效率。 2 步骤:1.将要相连的字符串弄到一个数组中 2.利用join来连接,join的括号中的形参为‘’(空字符串);
c. split 通过split括号中形参来分隔字符串,并将之形成一个数组返回,和join有点相反的感觉
var s ='1-2-3-4'; var arr = s.split('-'); document.write(arr);//1,2,3,4
4.类数组:我的理解为因为某些方法的运行原理,可以利用对象来模拟数组的效果
(1)、可以利用属性名模拟数组的特性
(2)、可以动态的增长length属性
(3)、如果强行让类数组调用push方法,则会根据length属性值的位置进行属性的扩充。
1 var arrobj = { 2 '0' : 1, 3 '1' : 2, 4 '2' : 3, 5 'length' : 3, 6 'push' : Array.prototype.push 7 } 8 arrobj.push(4); 9 document.write(arrobj.length);//4 10 document.write(arrobj[3]);//4
原因:是因为对象的属性中有length的存在 和 push等方法的内部运行原理。
Array.prototype.push = function (num) {
this[this.length] = num;
this.length++;
.....
}
find:1.push属性没必要自己添加,可以直接用call方法来借用数组的方法,例如Array.prototype.push.call(arrobj,arg1,arg2,arg3...);
2.length如果初始值为0的话,可以不用手动添加设定,当你使用过一次Array.prototype.push.call(arrobj.arg1, arg2, arg3...),length属性会自动添加,并变为相应值,即1。
5.扩展
(1)try{}catch(){}finally{}
将可能产生错误代码放于try中,当产生错误时,会将错误信息返回发哦catch括号中形参中,catch的花括号中是错误的处理方法。
a. 正常JS代码当某行有错误,则该行之下该代码都不会执行,但try中代码产生错误后,不会影响try之外的代码的执行。
b. 只有try中代码产生错误时,catch中处理错误代码才会执行,否则不会执行。而finally中代码不管是否有错误,最终都会执行,但经常finally可省略不写.
(2) ECMAScript
es3.0
es4.0
es5.0//在代码前加入“ 'use strict';”这个字符串则其之后的代码处于严格模式下
处于严格模式下的一些限制:
a. 不支持with,with可改变作用域链
1 var obj = {a : 123} 2 function test(){ 3 //'use strict'若在此添加左端字符串,则报错with不可使用 4 var a = 234; 5 var b = 1; 6 var 7 with(obj){//将obj作为其作用域链的最顶端,即将obj放于执行上下文的 最顶端,优先查找obj 8 document.write(a);//123 9 document.write(b);//1 10 } 11 with(documnet){ 12 write(a);//234 13 write(b);//1 14 } 15 }
b. 不支持arguments.callee
c. 不支持caller
d. 变量赋值前必须声明,否则报错
e. 局部this必须被赋值
1 function test(){ 2 document.write(this);//非严格模式下返回window,但严格模式下返回的是undefined 3 } 4 5 test.call(undefined/null);//window 6 test.call(undefined/null);//严格模式下为undfined/null
f. 参数名字不可重复
现在是es6.0,其中有类的存在,类似java,功能更强大
6.数组分类:
(1)数值数组:其索引值为数字
(2)关联数组:其索引值不一定为数组,还包括字符串。
(3)稀疏数组:数组元素的索引不是连续的,他们之间可以有空缺。(注意空缺位置是没有值的,而不是undefined,可用 0 in arr 来检测,返回boolean值)
稀疏数组的创建: 1. var arr = new Array(3); 2. var arr = []; arr[3] = 3;/ var arr = [,,]; / var arr = [1,,3];
满足length > 数组元素数目即可。
(4)非稀疏数组:数组元素的索引是连续的,之间无空缺。

浙公网安备 33010602011771号