1. ***日期API
2. ***Error
1. ***日期API
单位: FullYear Month Date Day
Hours Minutes Seconds Milliseconds
API: 1. 每个单位都有一个对儿get/set方法
比如: var year=date.getFullYear()//获取单位的值
date.setFullYear(year)//设置单位的值
特殊: Day没有set方法
2. 命名: 年月日星期没有s结尾
时分秒毫秒都有s结尾
3. 取值范围: 只有Date从1~31
不考虑FullYear, 其余都是从0开始,到进制-1结束
Month: 0~11 总比现实中小1, 需要修正
Date: 1~31 不用修正
Day: 0~6 不用修正
Hours: 0~23 不用修正
Minutes/Seconds: 0~59 不用修正
日期计算:
1. 计算两个日期的时间差: 两日期相减,得毫秒数,再换算
2. 对任意单位做加减: 3步:
1. 取分量: var d=date.getDate();
2. 做加减: d+=60
3. 放回去: date.setDate(d);
强调: 所有set方法可自动调整时间进制
其实可简写为: date.setDate(date.getDate()+60)
转字符串:
date.toString() -> 当地时间的完整时间格式
date.toLocaleString() ->当地时间的简化版格式
date.toLocaleDateString() -> 当地时间的日期部分
date.toLocaleTimeString() -> 当地时间的时间部分
date.toGMTString() -> 标准时区的标准时间
作业: 自定义format函数: 2_format.html
2. ***Error
什么是错误(bug): 程序执行过程中遇到的异常中断。
一旦发生错误,程序立刻退出。
什么是错误处理: 即使程序发生错误,也能保证程序不异常中断的一种机制。
如何:
try{
可能发生错误的代码
}catch(err){//仅在发生错误时,才执行
错误处理代码: 1. 提示用户错误信息(String(err))
2. 记录系统日志
}finally{
无论是否发生错误,都必须执行的代码。
比如: 释放资源!
}
err: Error对象: 在错误发生时,自动创建的,保存错误信息的对象。
错误类型6种:
SyntaxError 语法错误
ReferenceError 要使用的变量没找到
TypeError 错误的调用了对象的方法
RangeError 参数范围越界 比如: toFixed(d) 0~20
EvalError URIError
1. ***错误处理
2. ***Function
*****闭包
1. ***错误处理
只要可以提前预料的错误,都要用if...else...来代替try catch
只有无法提前预料的错误,采用try catch
主动抛出错误:
为什么: 抛出错误通常是为了提醒使用者错误的使用的程序
如何: throw new Error("错误消息")
2. ***Function:
什么是: js中一切函数都是对象
函数对象是专门封装函数定义的对象。
创建: 3种:
1. 声明: function 函数名(参数列表){函数体; return 返回值;}
何时: 只要一段代码被反复使用,都要先定义在一个专门的函数中,再反复调用函数即可——复用
何时使用参数: 只要函数步骤中必须某些数据才能正常执行时,就要定义参数。
何时使用返回值: 如果函数的调用者需要函数的执行结果时,函数就必须返回值。
可被声明提前:
2. 函数直接量:
var 函数名=function(参数列表){函数体; return 返回值;};
不会被声明提前。
****声明提前(hoist): 在开始执行程序前,将所有var声明的变量和function声明的函数提前到*当前作用域*的顶部,集中创建。
赋值留在原地!
何时: 只要不希望被声明提前时。
揭示了: 函数名仅是一个普通的变量
函数定义其实是一个对象
函数名中仅保存了函数对象的地址——引用
3. 用new:
var fun=
new Function("参数1","参数2",...,"函数体; return 返回值")
比如: function compare(a,b){return a-b;}
var compare=function(a,b){return a-b;}
var compare=new Function("a","b","return a-b;");
***重载(overload):
什么是: 相同函数名,不同参数列表的多个函数,在调用时,可根据传入参数的不同,自动选择对应的函数调用!
为什么: 减轻调用者的负担,一个函数名,可执行多种操作
何时: 一项任务,根据不同的参数,执行不同的操作流程时
如何: js语法不支持重载效果
变通: 所有函数对象内,都自动内建了一个arguments对象
arguments对象:
专门保存传入函数的所有参数值的类数组对象
类数组对象: (object like array)
vs 数组: 相同: 下标, length, for遍历
不同: 类数组对象是Object,不是Array,无法使用Array的API
数组是Array类型,可以使用数组类型所有的API
匿名函数:
什么是: 函数创建时,不被任何变量引用的函数
为什么: 节约内存
何时: 如果一个函数只用一次,用完希望自动释放时
1. 回调callback: 将函数作为参数传递给另一个函数去调用
比如: arr.sort(function (a,b){return a-b});
str.replace(/reg/g,function(kw,$1,...){return ...})
2. 自调: 创建函数后立刻调用自己!
何时: 如果一个函数只执行一次,不会再重用时
为什么: 建立临时作用域!避免全局污染!
如何:
(function(参数列表){函数体; return 返回值})();