197:in、预解析、变量提升、对象引用、Date对象
1、预解析
即,把var的变量在,作用域下,提前;
(1)JS代码运行原理
预先解析,JS第一次解析代码叫预解析。
JS本身会解析两次代码:
第一次 —— 预解析:粗略过一遍,检查代码是否为JS的代码格式,不管运行错误
第二次 —— 正常解析:正常运行代码,更仔细
1、预解析出现错误:
就是语法出去,代码完全不执行,所有写的JS均失效
2、正常解析出现错误:
即运行错误,从错误代码开始,后面的均不执行
(2)in
判断量是否在对象上,在返回true,不在则false;
常见的:关于window的:
(3)变量提升
在预解析过程中会触发两个现象:报错 - 和 - 变量提升
即:把var的变量在该作用域下提前;
1、
只提升变量,不提升赋的值;
解析:b中的var a = 20;触发变量提升,在var a;提前,但赋的值20不提前,所以有一个虚拟的未赋值的var a;在alert上方,覆盖了外面的10,因为虚拟的那个a未赋值,所以输出undefind。
2、
变量提升只在该作用域内提升
这里的var a = 10被执行了,所以存在与window下,所以在下面的script中能拿到这个a的值。
197-198:Date时间戳、常用方法详解及简易时钟做法
1、date
(1)时间对象
new Date(); ---- 时间对象
parseInt();
去掉小数,取整;
(2)常用方法 – get
1、getTime()
获取当前的时间戳;
单位:毫秒ms
从1970.1.1 0:0:0开始到现在的总毫秒数;
2、getFullYear()
获取当前年份
3、getMonth()
返回当前月份;
以为是从0开始数的,所以输出的月份比实际月份小1;
这里应该是5月;
4、getDate()
返回当前日期;
5、getHours()
返回当前小时数,24小时制
6、getMinutes()
返回当前分钟数
7、getSeconds()
返回当前秒数;
7、getDay()
返回当前星期;0=星期日
(3)常用方法 – set
所有的get方法都有对应的set方法;
2、setMonth()
修改月份,同时会改变时间;
返回当前年份的第几个月,可以为负数,负数则倒着数
4、setDate()
2、对象
new Date();所有new出来的都是对象;
对象的两个机制:
1、引用
2、可以给私有属性