一:函数
1,函数定义
函数作用:通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。
函数是对象,函数名是指针
//函数定义方式一:函数声明
function function_name (argument) {
// body...
}
//函数定义方式二:函数表达式(匿名函数)
var function_name = function(argument){
// body...
}
函数可通过return语句来实现返回值,函数在执行完return语句后停止并立即退出,位于return语句之后的任何代码永远都不会执行。未指定返回值的函数返回的是一个特殊的undefined值
①ECMAScript中的参数在内部是用一个数组来表示的,在函数体内可通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数
②arguments.length 可以获知有多少个参数传递给了函数
③因函数参数是以一个包含任意个值的数组的形式传递的,所以ECMAScript中没有函数签名的概念,因此ECMAScript函数不能重载
2,执行环境与作用域链
执行环境:定义了变量或函数有权访问的其他其他数据,决定了它们各自的行为
执行环境:全局执行环境 -->window对象
局部执行环境 -->函数体
作用域链:保证对执行环境有权访问的所有变量和函数的有序访问
tips:如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境
3,闭包函数
待更新...
二:引用类型
1,Object类型
// 创建Object实例的方式一:
var person1 = new Object();
person1.name = "rock";
person1.age = 18;
// 创建object实例的方式二:对象字面量表示法
// 注意:用逗号分隔,最后一个属性后面不能添加逗号
var person2 = {
name:"mike",
age:27
};
// 访问对象属性的方法:
console.log(person1.name)
console.log(person1["age"])
console.log(person2.name)
console.log(person2["age"])
2,Array类型
ECMAScript数组:数据的有序列表,每一项可以保存任何类型的数据
ECMAScript数组的大小可以动态调整,即可以随着数据的添加自动增长以容纳新增数据。其项数保存在length属性中
// 创建数组方式一:使用Array构造函数
var colors = new Array(); //new 可省略
var colors = new Array(20); //项数为20的数组
var colors = new Array("red");
// 创建数组方式二:使用数组字面量表示法
var colors = []; //空数组
var colors = ["red","blue","green"];
instanceof:确定一个值是哪种引用类型
var arr1 = [];
// 方式一:
if (arr1 instanceof Array){
console.log("arr1 is a array");
}
// 方式二:IE9+开始支持
if (Array.isArray(arr1)){
console.log("arr1 is a array");
}
数组的toLocalSttring()、toString()和valueOf()默认以逗号分隔的字符串形式返回数组项。
join()方法可以使用不同的分隔符来构建这个字符串。
var colors = ["red","green","blue"];
console.log(colors.toString()); //red,green,blue
console.log(colors.join(":")); //red:green:blue
队列方法:先进先出
shift():移除数组中的第一个项并返回该项
unshift():能在数组前端添加任意个项并返回新数组的长度
栈方法:后进先出
push():可接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度
pop():从数组末尾移除最后一项,并返回移除的项
重排序方法:
reverse():反转数组项,颠倒其顺序
sort():调用每个数组项的toString()方法,比较得到的字符串以确定如何排序,默认为升序
// 定义实现数组内数字降序排序的函数
function comparefn (v1,v2) {
if (v1<v2){
return 1;
}else if(v1>v2){
return -1;
}else{
return 0;
}
}
var arr1 = [6,9,1,3,8,2,0];
// arr1.sort(); //默认升序 [0, 1, 2, 3, 6, 8, 9]
arr1.sort(comparefn); //[9, 8, 6, 3, 2, 1, 0]
console.log(arr1);
操作方法:
concat():基于当前数组中的所有项创建一个新数组
这个方法会先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组
slice():能基于当前数组中的一个或多个项创建一个新数组
一个参数:返回从该参数指定位置开始到当前数组末尾的所有项
两个参数:返回起始和结束位置之间的项(不包括结束位置的项)
splice():删除--> 可删除任意数量的项;
两个参数:要删除的第一项的位置和要删除的项数
插入-->3个及以上参数:起始位置、0(要删除的项数)、要插入的项
替换-->3个及以上参数:起始位置、要删除的项数、要插入的项
splice()方法返回一个数组,该数组包含从原始数组中删除的项(无删除项,则返回一个空数组)
位置方法:使用全等操作 (IE9+开始支持)
indexOf():从数组的开头开始向后查找,返回要查找的项在数组中的位置,没找到的情况下返回-1
lastIndexOf():从数组的末尾开始向前查找,返回要查找的项在数组中的位置,没找到的情况下返回-1
两个参数:要查找的项、查找起点位置(可选)
归并方法:
reduce():从数组的第一项开始,迭代数组的所有项,构建一个最终返回值
reduceRight():从数组的最后一项开始,迭代数组的所有项,构建一个最终返回值
3,Date类型
Date类型使用自UTC1970年1月1日零时开始经过的毫秒数来保存日期
parse():接收一个表示日期的字符串参数,返回1970年1月1日午夜到指定日期(字符串)的毫秒数
UTC():参数为 年份,月份,天数,小时,分钟,秒(年份月份必需,月份是基于0的,即1月是0),根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数
Date类型的valueOf()方法返回日期的毫秒表示,因此,可以方便使用比较操作符来比较日期值
var nowTime = new Date();
//不传参数:自动获得当前日期和时间
//传递参数:传入表示日期的毫秒数创建该特定日期和时间的日期对象
//Thu May 31 2018 19:56:20 GMT+0800 (中国标准时间)
console.log(nowTime.toLocaleString()); //2018/5/31 下午7:56:20
var time1 = new Date(Date.parse("May 31,2018"));
// Thu May 31 2018 00:00:00 GMT+0800 (中国标准时间)
var time2 = new Date("May 31,2018"); //后台调用Date.parse()
var time3 = new Date(Date.UTC(2011,11,11,11,11,11));
//Sun Dec 11 2011 19:11:11 GMT+0800 (中国标准时间)
var time4 = new Date(2011,11,11,11,11,11);
//Sun Dec 11 2011 11:11:11 GMT+0800 (中国标准时间)
nowTime.getDate(); //31
nowTime.getDay(); //4 获取星期
nowTime.getFullYear(); //2018
nowTime.getMonth(); //4 获取月份,月份是基于0的,1月为0
nowTime.getHours(); //19
nowTime.getMinutes(); //56
nowTime.getSeconds(); //20
nowTime.getTime(); //1527768440026
// 计算时间间隔:IE9+开始支持
var start = Date.now();
var stop = Date.now();
var result = stop - start;
// 替代方案
var start = +new Date();
var stop = +new Date();
var result = stop - star
4,RegExp类型
regular expression 正则表达式
// 字面量形式
var expression = /pattern/flags;
// 构造函数形式
var expression = new new RegExp(pattern, flags);
flags:g -->全局模式,即模式将被应用于所有字符串
i -->不区分大小写模式
m -->多行模式
模式中使用的所有元字符都必须转义:()[]{}\^$|?*+.
方法:
exec():接受一个参数,即要应用模式的字符串,返回包含第一个匹配项信息的数组(或null)
test():接受一个字符串参数,返回true或false
属性:
lastIndex:表示开始搜索下一个匹配项的字符位置,从0算起
index:匹配项在字符串中的位置
input:应用正则表达式的字符串
5,Function类型
//函数定义方式一:函数声明
// 解析器会率先读取函数声明,即函数声明提升
function function_name (argument) {
// body...
}
//函数定义方式二:函数表达式(匿名函数)
// 解析器执行到它所在的代码行才开始解释执行
var function_name = function(argument){
// body...
}
函数内部对象:
arguments:主要用来保存函数参数
arguments.callee 指向拥有这个arguments对象的函数;用于消除函数体内代码与函数名紧密耦合的现象
this:引用的是函数执行的环境对象
caller:保存着调用当前函数的函数的引用(全局中值为null)
函数属性:length --函数接收的命名参数的个数
prototype--保存引用类型所有实例方法的真正所在
函数方法:在特定的作用域中调用函数,等于设置函数体内this对象的值
apply() :参数--运行函数的作用域 、参数数组
call():参数-- 运行函数的作用域 、参数 、参数
bind():会创建一个函数的实例,其this值会被绑定到传给bing()函数的值上
6,基本包装类型
引用类型:使用new操作符创建,在执行流离开当前作用域之前都一直保存在内存中
基本包装类型:后台自动创建,只存在于一行代码的执行瞬间,然后立即被销毁
number类型
var numberObject = 10;
// 后台会自动创建number类型
var numberObject = new Number(10);
方法:
toFixed():按照指定的小数位返回数值的字符串表示
toExponential():返回以指数表示法表示的数值的字符串形式
toPrecision():返回toFixed()值或toExponential()值,看具体规则采用哪种格式最合适
string类型
var stringObject = "hello"
// 后台会自动创建string类型
var stringObject = new String("hello");
length属性:返回字符串中包含多少个字符
可通过索引访问特定字符:StringValue[0]
方法:
charAt():接收一个参数,即基于0的字符位置;返回给定位置的字符
charCodeAt():接收一个参数,即基于0的字符位置;返回给定位置字符的字符编码
concat():拼接字符串,返回拼接得到的新字符串
slice():切片,返回一个新子字符串;参数--子字符串的开始位置、结束位置(不含此位)
substring():同slice()
substr():返回一个新子字符串;参数--子字符串的开始位置、返回的字符个数
indexOf():从前往后搜索,返回子字符串的位置;若不存在该子字符串,则返回值 -1
lastIndexOf():从后往前搜索,返回子字符串的位置
trim():去除前后的空格
toLowerCase():转换成小写
toUpperCase():转换成大写
replace():替换,参数--被替换字符串、替换字符串
Math对象
Math.min():返回一组数值中的最小值
Math.max():返回一组数值中的最大值
舍入方法:
Math.ceil():向上舍入
Math.floor():向下舍入
Math.round():标准的四舍五入
Math.random():返回大于等于0且小于1的一个随机数
Math.abs():返回绝对值
Math.pow(x,y):返回x的y次幂
从某个整数范围内随机选择一个值,公式如下:
值 = Math.floor(Math.random()*可能值的总数 + 第一个可能的值)