一、作用域
二、预解析
1:如果先输出,再声明,那么默认会把变量声明提升到最前,但是不赋值
2:这里虽然是声明函数,但是是变量提升,也就是先声明fun变量,再给fun函数,所以会报错。像这种一般都是先预解析声明变量,然后后面的代码照抄。
3:如果函数这样声明,那么不管在前面调用还是后面调用是没有影响的,因为默认会把函数声明放到最前面预解析
所以这个例子默认是这样的代码:
三、对象
无序的相关属性和方法的集合
对象由属性和方法组成
创建对象的三种方法
1.字面量
Var obj={};空的对象
Var obj={
Name:’张三疯‘,
age:18,
sex:‘男’,
sayHi:function(){
Console.log(‘Hi’);
}
};
有属性,有方法(逗号隔开)
使用对象:对象名.属性名
Log obj.name / obj[‘age’]
Obj.sayHi();这个直接用不用log
2.new Object
Var obj = new Object();创建空对象
Obj.uname = ‘张张‘;
obj.name=18;
obj.sex=‘男’;
obj.sayHi = function(){
Console.log(‘Hi’);
}
3.构造函数(里面封装的不是普通代码是对象)
前面两种只能一次创建一个对象
function Star (name,age,sex) {
this.age=age;
this.name=name;
this.sex=sex;
this.sing=function(sang){
console.log(sang);
}
}
var ldh=new Star('ldh',18,'nan');
ldh.sing('bingyu');
(名字首字母要大写)
调用:var ldh=new Star('ldh',18,'nan');不需要return就可以返回结果
只要调用了函数就创建了一个对象
利用构造函数创建对象的过程也称为对象的实例化
遍历对象属性
for(var k in obj){
Console.log(k);K变量输出,得到的是属性名
console.log(obj[k];得到的是属性值
}
遍历不能用于第三种方法上
注意:
1.构造函数首字母必须大写,这是约定
2.构造函数不需要return,就可以返回结果
3.调用构造函数创建对象必须要有new
4.和普通函数相比,其实就多了this和new
5.注意这里的形参和实参
4.遍历对象
var dog = {
name: '可可',
age: 5,
type: '阿拉斯加犬',
color: '棕红色',
skills: function () {
console.log('bark');
console.log('showFilm');
}
}
遍历:
for (var k in dog) {
console.log(k); //k是得到属性名
console.log(dog[k]); 对象名[k]是得到属性值
}
5.Math对象
四舍五入,但是5特殊,往大了取,1.5按2,-1.5按-1
6.随机数方法random
返回一个随机的小数【0,1)
console.log(Math.random());
案例: 猜数字游戏,猜十次猜不到就停止
function getNum(min,max)
{
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var num=getNum(1,10);
for(var i=1;i<=10;i++)
{
var yournum= prompt('请输入一个数字');
if(yournum<num&&i<=10){
console.log('猜小啦');
continue;
}
else if(yournum<num&&i<=10){
console.log('猜小啦');
continue;
}
else if(yournum==num&&i<=10){
console.log('猜对啦');
break;
}
else{
console.log('没次数啦');
break;
}
}
取随机数这个要记住
7.日期对象
是一个构造函数,必须new一下才能使用
var date = new Date();没有参数,就返回系统当时时间
var date = new Date(2019,10,1);但是这种写法月份输出的会大一
var date = new Date(‘2019-10-1 8:8:8’);这种比较常见也没有什么问题
var date=new Date('2023-8-16 8:8:8');
console.log(date.getDate());
月份就会比实际小1,get之后再加一下
8.获得date的毫秒数
是从1970年1月1日开始的
var date=new Date();
1.console.log(date.valueOf());
2.console.log(date.getTime());
3.Var date1=+new Date(); !!!
4.console.log(Date.now());!!!!!!!
H5新增的获取总毫秒数的写法:
console.log(Date.now());
倒计时案例!!!
总体思想是用未来的时间减去现在的时间,但是分钟减分钟可能还得减出来负数,所以就用时间戳来,算总共的时间去减
function countDown(time){
// time是用户输入的时间
var nowTime = +new Date();
// ()内为空返回的是当前时间的毫秒数
var futureTime= +new Date(time);
var times=(futureTime-nowTime)/1000; //times是总的毫秒数,除以1000是秒数
var day=parseInt(times/60/60/24);
day=day<10?'0'+day:day;
var hour=parseInt(times/60/60%24);
hour=hour<10?'0'+hour:hour;
var m=parseInt(times/60%60);
m=m<10?'0'+m:m;
var s=parseInt(times%60) ;
s=s<10?'0'+s:s;
// 得是整数啊!
return day+'天'+hour+'小时'+m+'分钟'+s+'秒';
}
console.log(countDown('2024-5-1 18:00:00'));
var date=new Date();
console.log(date);
// 但是这样写有点不好看,00:05这样