数组与函数--js基础
一:数组
1.创建数组
- 使用new创建数组
var 数组名 = new Array();
eg:var arr = new Array();//创建一个空数组
var arr = new Array(2);//创建一个长度为2的空数组
var arr = new Array(2,3) //等同于var arr = [2,3] - 使用数组字面量创建数组:[]
var 数组名 = []; //创建一个空数组
eg:var 数组名 = [1,2,'aef',true];
2.获取数组元素
使用数组下表,下标从0开始
格式:数组名[索引号]
eg:arr[0]
索取所有元素:使用for循环遍历
3.获取数组长度
使用length属性
格式:数组名.length
4.数组新增元素
- 通过length属性实现数组扩容( length属性是可读写的)
- 给对应索引号的元素赋值(新增或修改)eg:arr[3]=4
注意:不能直接给数组名赋值,否则数组中所有元素将被覆盖 - push方法 eg:arr.push(4,'pink') //向数组末尾添加元素,返回值为新数组长度
- unshift方法 eg: arr.unshift(1,'cc') //向数组前面添加元素,返回值为新数组长度
5.删除数组中的元素
- 使用一个新数组存放筛选后的数据
- 遍历原始数组
- pop方法 eg:arr.pop() //删除数组的最后一个元素,返回值即为删除的元素
- shift() eg: arr.shift() //删除数组的第一个元素
6.数组排序
- reverse():翻转数组 //arr.reverse()
- sort() :给数组排序(冒泡排序) // arr.sort(),默认为升序
优化:
arr1.sort(function(a,b){
return a-b; //升序的排序
//return b-a;降序
})
7.判断是否为数组
方法一:isinstanceof关键字
console.log(arr isinstanceof Array)
方法二:Array.isArray(参数) //h5新增,ie9以上支持
8.数组索引
- indexOf():数组中查找给定元素的第一个索引,如存在返回索引号,如不存在返回-1
- lastIndexOf():在数组中最后一个的索引,如存在返回索引号,如不存在返回-1
9.数组去重
核心算法:
遍历旧数组
判断元素是否在新数组存在,不存在则添加(利用indexOf()判断,如返回-1则证明在新数组中不存在)
10.数组转字符串 - toString() //arr.toString()
- join(分隔符) //arr.join('-') ,如不传入参数默认为逗号
二:函数
- List item
定义规则:
function 函数名(形参1,形参2){
}
-
List item
函数调用:
函数名(实参1,实参2)
注意:如形参个数多余实参个数,会取到形参个数;如实参个数少于形参个数,未被赋值的形参是undefined。 -
函数返回值return
return终止函数并且返回只能返回一个值(如用逗号隔开,则以最后一个值为准)
如函数没有return则返回undefined
- arguments的使用
当不确定有多少个参数传递的时候,可用arguments来获取。arguments是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。它是一个伪数组:具有length属性,按照索引方式进行存储,但是没有真正数组的一些方法pop(),push()等
function fn(){
console.log(arguments)
}
fn(1,2,3)
- 函数作用域:
函数内的作用域即为局部作用域;
全局作用域,在整个script标签中都生效
注意:函数内未声明直接定义的变量为全局变量
js中没有块级作用域
- 作用域链:
内部函数可以访问外部函数变量的这种机制,即采用链式查找的方式,就近原则。
- 预解析:
js代码是由浏览器中的js解释器(即js引擎)来执行的。js解释器在运行js代码时分为两步:预解析和代码执行。
预解析:js引擎会把js里所有的var和function提升到当前作用域的最前面
- 变量提升:只提升声明部分,不提升赋值
- 函数提升:把所有函数声明提升到作用域最前面(因此调用可在定义之前)
代码执行:按照代码书写顺序从上往下执行
特殊案例:
var a=b=c=9; //等同于var a=;b=9;c=9;
var a=9,b=9,c=9 //集体声明的正确方式