函数
1)函数的创建
a. 函数声明
function 函数名(形参列表){
//函数体
}
例:
function sayHello(name){
console.log('hello',name);
}
重点:函数整体提升为函数声明,函数的调用可以在函数声明前。
(//解析器先读取函数声明再加载数据)
b. 函数表达式
(//将一个匿名函数赋值给一个函数变量,匿名函数是没有函数名的函数)
var 函数名=function 函数名(形参列表){
//函数体
}
例:
var sayHello=function(name){
console.log('hello',name);
}
重点:变量名提升为undefined,函数表达式之前函数名为undefined。
2)函数调用(4种方法)
a.函数名(实参列表); //sayHello('terry');
b.函数名.call(执行环境对象,实参列表);
c.函数名.apply(执行环境对象,实参列表数组);
d.new sayHello() //一般用于构造函数
sayHello
属性 name
方法 sayHello.call() //让sayHello去执行
sayHello.call(this,params1,params2,...) //调用当前方法
sayHello.apply(this,params) //params为(类)数组对象
3)函数的内部参数(//只有在函数内部才能访问的参数)
只有在函数运行的过程中才能被确定值的参数
a.形式参数
b.arguments 实参所在,类数组对象(索引、长度length)
length 获取arguments中元素的个数
arguments[0] //通过索引访问
arguments[1]
callee 指向当前函数名
c.this 当前的执行对象(环境对象)
function test(a,b){
arguments
return a+b;
}
test(1,2,3,4,5);
var sayHello = function(){
console.log('hello');
}
(function(){
console.log('hello');
})();
this取值与函数的调用方式有关
///////////////////////////////////////////
重点: obj.sayHello(); //this指向obj
sayHello(); //this指向node
(function(){})() //this指向node,全局环境对象global/window
4)函数的应用
(//函数本质上是一种对象,可以将其当做普通对象来使用)
var a = function(){
console.log("hello");
}
a为变量,指向函数,函数是特殊的对象,a保存的是指向函数的指针。
a可以作为值,参数,返回值。
1.函数式编程(lamla表达式,回调函数)
将函数作为参数进行传递
(//函数名本身就是变量,所以函数可以当做值来使用)
function dealData(handler){
var data={
name:'terry',
age:12
}
//处理data的代码
handler(data);
}
dealData(function(data){
console.log(data.name);
});
2.函数作为返回值()
function foo(){
return function(){
return 1;
}
}
var bar=foo();
//返回function(){
return 1;
}
var bar=foo()();
//返回1
//函数必须调用才会执行。
数组
1.数组的定义
数组是有序列表,是存放多个值的集合。
特性:值可以为任意数据类型
var arr=[1,true,’hello’,null,undefined,{},[],function(){}];
数组长度可以动态变化。两大要素:length,元素。
length属性可读可写。
2.数组的创建
1)使用构造函数创建数组
var arr=new Arry(3);
a.单个值(3),数组长度为3
b.单个/多个字符/多个数值,初始化数组的元素
2)使用数组字面量创建数组
var arr=[‘terry’,’larry’]
3.数组的访问
a.访问数组的长度:arr.length
b.访问数组中的元素:arr[索引]
如果索引超过了数组的长度,那么这个值undefined
4.数组的应用
班级名称 string
班级人数 number
某个同学的信息 Object
全班同学的信息 Array
**数组反转
数组排序:
**选择排序
var arr=[5,3,1,2,4];
插入排序
希尔排序
快速排序
5.数组方法
var obj=new Object();
Object 【构造函数,圆形(方法)】
obj 可以调用原型中的方法
var arr = new Arry();
var arr=[];
arr 可以调用Array原型中的方法
1)栈,队列方法:-----改变了原数组
a.栈
push()
含义:入栈。可接受任意类型的数据,将它们逐个添加到数组的末尾,并返回数组的长度。
参数:
单个值,直接插入到数组末尾
多个值,将多个值依次插入数组末尾
数组,直接插入到数组末尾
返回值:操作后数组的长度
pop()
含义:出栈。从数组的末尾移除最后一项,减少数组的length值,返回移除的项。
参数:单个值/多个值/数组
返回值:被移除的项
b.队列-----改变了原数组
shift()
含义:移除数组中的第一个项,并返回该项,同时将数组的长度减一。
参数:任意或者无
unshift()
含义:在数组的前端添加任意个项,并返回新数组的长度。
参数:单个值/多个值
2)排序:-----改变了原数组
a.反转
reverse()
含义:反转数组项的顺序
参数:
数组或者无
返回值:
反转后的数组
b.排序
sort()
返回排序(升序)后的数组。
参数:
function(a,b){
if(a > b){
return 1;
} else {
return -1;
}
}
如果返回值大于0,a的索引在后,b在前
if(a>b){
return 1;
}
升序,a在b后,a>b,所以大的在后
if(a<b){
return 1;
}
降序,a在b后,a<b,所以小的在后
3)截取方法(子数组的提取):
a.concat()-----不改变原数组
含义:数组拼接
例:
arr1=[1,2,3,4];
arr2[5,6,7];
arr1.concat(arr2);
返回[1,2,3,4,5,6,7],
此时数组arr1和arr2的值不变。
b.slice()-----不改变原数组
含义:子数组的提取,可接收一个或两个参数(返回项的起始位置,结束位置)。
1)当接受一个参数时,截取从该参数指定的位置开始,到当前数组末尾的所有项。
2)当接收两个参数时,截取起始位置到结束位置之间的项,但是不包含结束位置的项。
例:
arr=[1,2,3,4,5,6,7];
arr.slice(2);
返回[3,4,5,6,7]
arr.slice(2,5);
返回[3,4,5]
c.splice()-----改变原数组
splice(begin,len,item1,item2,...)
begin 起始位置
len 从起始位置开始删除项的个数
item1,item2... 插入的项
含义:向数组中插入数据,将始终返回一个数组,该数组中包含从原始数组中删除的项。
1)删除:指定两个参数(删除的起始位置,要删除的项数)。返回被删除的项。
2)插入:指定三个参数(起始位置,0,要插入的任意数量的项)。返回[](表示没有删除项)。
3)替换:指定三个参数(起始位置,要删除的项数,要插入的任意数量的项)
//要删除的项数是指从当前位置开始,包括当前位置的项。
例:
arr=[1,2,3,4,5,6,7];
1)arr.splice(1,3);
返回[2,3,4],此时arr=[1,5,6,7]
2)arr.splice(1,0,8);//在起始位置前插入
返回[],此时arr=[1,8,5,6,7]
arr.splice(1,0,8,9,10);
返回[],此时arr=[1,8,9,10,5,6,7]
3)arr.splice(1,3,8,9);
返回[2,3,4],此时arr=[1,8,9,5,6,7]
4)索引方法
a.indexOf()-----不改变原数组
从数组开头向后查找,使用全等操作符,找不到该元素则返回-1.第一个参数为要查找的项,第二个参数(可选)为索引开始位置。
arr=['a','b','c','d','e']
arr.indexOf('c');//返回2
arr.indexOf('f');//返回-1
arr.indexOf('d',0)//返回3
b.lastIndexOf()-----不改变原数组
从数组末尾向前查找,使用全等操作符,找不到该元素则返回-1.第一个参数为要查找的项,第二个参数(可选)为索引开始位置。
arr=['a','b','c','d','e','c']
arr.lastIndexOf('c');//返回5
arr.lastIndexOf('d',4)//返回3
5)迭代方法
需求:拓展Array中的函数,要求遍历数组中所有元素,但是不处理结果,结果的处理交给回调函数。
a.every()---并且
含义:每一个元素是否满足条件,如果满足返回true。
参数:匿名函数(item,index,arr),必须返回boolean值。
b.some()---或者
只要有一个元素满足条件就返回true。
c.filter()---过滤
返回值:为每一个回调函数为true的元素的集合。(返回由满足条件的元素组成的数组)
d.map()---映射或投影
返回值:每一个回调函数的返回值组成的数组。
e.forEach()
含义:迭代。常用来遍历元素。没有返回值。
参数:匿名函数(item,index,arr)