JavaScript-day19-个人学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39946352/article/details/78572783

JavaScript-day19-个人学习笔记


一、Date:封装了一个时间点,提供了对时间和日期的操作API

1、Date中封装了?从1970年1月1日0点0分0秒至今的毫秒数

2、创建Date对象:4种:

(1)var now=new Date(); //创建一个新日期对象同时,保存了客户端当前时间点的毫秒数。——获取当前时间

(2)var time=new Date("xxxx/xx/xx [xx:xx:xx]")——自定义时间对象

(3)var time=new Date(年,月-1,日[,时,分,秒])

(4)复制日期对象

var date1=new Date();
var date2=new Date(date1.getTime());
                //new Date(毫秒数)
date2.setXXX(date2.getXXX()+-n)

3、Date 对象方法

(1)date.getTime():返回距 1970 年 1 月 1 日之间的毫秒数

(2)date.getSeconds() :返回 Date 对象的秒数 (0 ~ 59)。

(3)date.getMinutes() :返回 Date 对象的分钟 (0 ~ 59)。

(4)date.getHours():返回 Date 对象的小时 (0 ~ 23)。

(5)date.getDay():从 Date 对象返回一周中的某一天 (0 ~ 6)。

(6)date.getDate():从 Date 对象返回一个月中的某一天 (1 ~ 31)。

(7)date.getMonth():从 Date 对象返回月份 (0 ~ 11)。

(8)date.getFullYear():从 Date 对象以四位数字返回年份。

4、Date计算:2种

(1)两日期对象可直接相减,结果毫秒差

(2)对任意分量做加减:先get出来,计算,再set回去

*直接修改原日期对象*——date.setXXX(date.getXXX()+-n)

5、注意

(1)每个分量都有一对儿get/set方法;例:enddate.setFullYear(enddate.getFullYear()+3);但getDay()获得星期,没有setDay()。

(2)命名:年月日星期,不加s;时分秒毫秒,加s。例:get/setFullYear()

(3)返回值:月中的日取值范围从1开始到31结束,其余都是从0开始到减1结束

(4)enddate.toLocaleDateString():返回date对象的日期部分的本地化字符串(根据本地化日期规则表示)。

二、错误/异常处理

1、什么是错误:导致程序无法继续执行的异常状态,js中一旦发生错误,就会自动创建一个Error类型对象

2、js中有几种错误类型(6种)

(1)SyntaxError:语法错误

(2)ReferenceError:引用错误,找不到变量或对象

(3)TypeError:类型错误,错误的使用了对象中的方法

(4)RangeError:范围错误,参数超范围

(5)EvalError:调用eval函数时出错

(6)URLError:URL错误

3、如何错误处理:在程序发生错误时,保证程序不退出或正常退出

语法:tryCatch块:3部分

try{
     正常代码段中,可能出错的代码段
}catch(err){//仅在发生错误时才执行
      //一旦发生错误err中就会自动存入Error对象
       1、记录/显示错误的信息
       2、继续向调用者抛出异常
}[finally{
       无论对错,一定都会执行的代码段
       释放资源
}]
4、建议:尽量优先使用if...else结构判断已经预知的错误,只有无法预知的错误,才用try catch。

5、抛出自定义异常:throw new Error("自定义错误消息")
比如:如果程序员甲定义了一个方法,被程序员乙调用,如果程序员乙错误的使用甲的方法,甲的方法中就要抛出自定义错误消息,乙在调用时,就要将甲的方法包在try块中。

三、Function对象:js中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量

1、arguments对象:函数对象内,自动创建的专门接收所有参数值的类数组对象

重载:程序中可定义多个相同函数名,不同参数列表的函数调用者不必区分每个函数的参数,执行时,程序根据传入的参数个数,自动判断选择哪个函数执行。

js语法不支持重载!但可用arguments对象模拟重载效果。

  arguments[i]:获得传入的下标为i的参数值

  arguments.length:获得传入的参数个数。

   即使定义了参数变量,arguments对象同样会收到所有参数值。

2、函数对象本质

(1)创建函数对象:3种:

a、声明方式:

function 函数名(参数){
     函数体;
    return 返回值
}
函数名和函数定义都被提前,在调用前后位置定义都行

b、函数直接量:

var 函数名=function(参数){
    函数体;
   return 返回值;
}
经函数名变量声明会提前,函数定义留在本地,必须定义在调用前

c、使用new创建函数类型对象:

var 函数名=new Function("a","b",...,"函数体");

(2)内存中的函数对象

创建函数对象时:同时创建2个对象:

      函数对象:函数的定义

      作用域链对象:保存了函数对象可用的变量位置的对象(栈),默认第一项指向window对象

调用函数时:又会创建1个新对象:

      活动对象:专门保存局部变量的对象,在作用域链对象中追加指向活动对象的引用

调用函数时:作用域链中活动对象的引用出栈,活动对象因无人引用而释放。

3、匿名函数:定义时,不指定函数名的函数

何时使用:2种用途

a、匿名函数自调:定义完,立刻执行,执行完立刻释放

何时使用:只能确定函数只执行一次时

如何自调:

(function(参数){
      函数体 
})(参数值);
自调:定义在哪里,就在哪儿执行,不提前

b、匿名函数回调:将函数作为对象传递给另一个函数,由另一个函数自主决定在需要时调用

何时使用:只要将一个函数对象传递给其他方法调用时

如何回调:直接将匿名函数的声明传入另一个函数中

4、闭包:函数能使用函数外定义的变量(重难点)

(1)问题:全局变量和局部变量的缺陷

全局变量:容易全局污染

局部变量:无法共享,不能长久保存

既可以共享,长久保存,又不会全局污染——闭包

(2)解决:3步:闭包三特点:

a、定义外层函数,封装被保护的局部变量

b、定义内层函数,执行对外层函数局部变量的操作

c、外层函数返回内层函数的对象,并且外层函数被调用,结果被保存在全局变量中

(3)何时使用即反复使用局部变量,又避免全局污染就要用闭包

猜你喜欢

转载自blog.csdn.net/weixin_39946352/article/details/78572783
今日推荐