2.9学习
预解析(注意点)
js引擎会把所有的var和function提升到作用域的最前面。
1.变量预解析
把所有的变量声明提升到当前作用域的最上面
如果在使用变量后才声明和初始化,只把声明部分提前,赋值(函数调用)不会提前。
2.函数预解析
把所有的函数提升到作用域最前面(包括函数调用)
var fun=function(){}与function fun(){}的区别
在函数作用域内的调用参数就近(前)原则若函数内外都有声明同名函数,只看最近的那个(函数内的那个)。
var a=b=c=9;这种声明其实相当于var a=9;b=9;c=9;
b和c没有声明到而直接赋值,当全局变量看。
要集体声明须var a=9,b=9,c=9;
在函数内的未声明赋值变量可以在外部使用。
对象
对象:一个具体的事物,而非泛指的类别。
对象是由属性和方法组成的。
有一点像结构体()
变量~属性 函数~方法
创建对象
1.利用字面量创建对象
var obj={
uname:'',
age:18,
sayHi:funcion(){
}
};
里面的属性和方法我们采取键值对的形式;(键:属性名,值:属性)
多个属性或者方法用对象隔开
方法后面跟的是一个匿名函数
使用属性如:console.log(obj.uname);
另一种方法:conlose.log(obj['age']);
调用对象方法obj.sayHi();
注意:属性在对象内不需要声明,使用时必须是对象.属性
2.利用object创建对象
var obj=new Object();
obj,uname='';
obj.age='18';
obj.sex='';
obj,sayHi=function(){
}
利用等号=赋值的方法添加对象的属性和方法
3.利用构造函数创建对象
可以重复创造多个对象
function 构造函数名(){
this.属性=值;
this.方法=function(){}
}
new 构造函数名();
1.构造函数名字首字母要大写
2.调用时要用到new
3.不需要return也能返回结果
如:new Star(‘’,18,‘’);
遍历对象
for in可以对数组和对象进行遍历
for(变量 in 对象){}
如for(var k in obj){
console.log(k);//输出属性名
console.log(obj[k])//输出属性值
}
内置对象(很重要)
js对象分类:自定义对象,内置对象,浏览器对象
最大优点:快速使用
【感觉像头文件】
查文档
MDN
查看参数及返回值。
Math对象
绝对值注意,会把字符串型数字转换为数字型
Math.flood/Math.ceil/Math.round
向下取整/向上取整/四舍五入
注意:-1.5四舍五入为-1
(.5往大了取值)
随机数方法
Math.random()返回一个浮点数
范围【0,1)
随机点名console.log(arr[getRandom(x,y)])
这个随机整数要自己会写。
日期对象
Date()
必须用new来调用创建我们的日期对象
如:var date=new Date()
如果没有1参数,返回当前系统的时间。
参数写法
2019,10,01(数字型)返回的是11月
‘2019-10-1 8:8:8’(字符串型)
部分需要+1
时间戳(获得一刻距离1970.1.1的总毫秒数)
倒计时
function countDown(time) { var nowTime = +new Date(); var inputTime = +new Date(time); var times = (inputTime - nowTime) / 1000;//得到秒 var d = parseInt(times / 60 / 60 / 24);//天 d=d<10?'0'+d:d;//单字补0 var h = parseInt(times / 60 / 60 % 24);//时 h=h<10?'0'+h:h; var m = parseInt(times / 60 % 60);//分 m=m<10?'0'+m:m; var s = parseInt(times % 60);//秒 s=s<10?'0'+s:s; return d + '天' + h + '时' + m + '分' + s + '秒'; } console.log(countDown('2023-2-17 13:45:00')); var date = new Date(); console.log(date);
数组对象
new数组里面单个值的是数组长度
如果有多个值,就依次代表元素
var arr=new Array(1,2,3)
检测数组
1.instanceof运算符 检测是否为数组
xxx instanceof xxx;是为true,否为false
2.Array.isArray(参数);
添加删除数组元素
一些用法
不用边扩容边新增,直接加
翻转数组
xxx.reverse();
sort
只看最左边的数(分不清多少位)
解决方案
a-b升序
b-a降序
具体可以看MDN
(到p175)