作用域
es6之前,全局作用域、局部作用域(函数作用域)
全局作用域
在script下定义变量
在函数内部没有声明直接赋值
局部作用域
在函数内部下定义变量
函数的形参也是局部变量
执行效率
1、局部变量只有在浏览器关闭时才会销毁,比较占内存
2、局部变量当我们执行完毕就会销毁,比较节约内存资源
作用域链
就因原则
JS引擎运行JS
预解析
变量预解析(变量提升)
把var提到最前面,值不提
函数与解析(函数提升)
把函数声明提升到作用域最前面
代码执行
创建对象的三种方法
无序的相关属性和方法的集合
对象字面量创建对象
花括号{}里面包含了这个具体事物的属性和方法
形式:
var 对象名 = { name = ’ ‘, age = ’ ‘ }
调用:
对象名.属性名
对象名['属性名']
利用new Object创建对象
var 对象名 = new Object();
对象名.uname = ’ ‘;
对象名.age = ’ ‘;
调用:
对象名.属性名
对象名['属性名']
构造函数创建对象
function 对象 (属性1,属性2,属性3){ this.属性1 = 属性 this.属性2 = 属性 this.属性3 = 属性 }
var 对象名 = new 对象 (属性1,属性2,属性3)
显示函数中的所有值
for (var k in 对象){ console.log(k); 得到 属性名 console.log(obj[k]); 得到 属性值 }
JS内置对象
Math对象
JS中自带的一些对象,直接可以拿来使用的,
Math.PI 圆周率
Math.floor() 向下取整
Math.ceil() 向上取整
Math.round() 四舍五入 .5时找最大值
Math.abs() 绝对值
Math.max()/Math.min() 最大值和最小值
日期对象
构造函数,需要new
用来处理日期和时间
当前时间
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']
var day = date.getDay();
console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day]);
获得总毫秒数,当前毫秒数
1、
var date = new Date();
console.log(date.valueOf()); 距离1970.1.1总的毫秒数
console.log(date.getTime());
2、
var date1 = +new Date(); 常用
3、H5新增
console.log(Date.now());
倒计时
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
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('2021-12-13 14:00:00'));
检测是否为数组
var arr = [];
console.log(arr instanceof Array);
console.log(Array.isArray(arr)) ie9以上
添加/删除数组元素
添加
push
在数组后面添加元素
数组名.push()
unshift
在数组前面添加元素
数据名.unshift()
删除
pop
删除数组中最后一个元素
数组名.pop()
shift
删除数组中第一个元素
数组名.shift()
数组对象
数组排列
翻转数组
数组名.reverse();
冒泡排序
数组名.sort(funtion(a,b){ return a - b; 升序排列 return b - a; 降序排列 });
数组索引
查找元素位置
数组名.indexOf('元素') 从开头开始
数组名.indexOf('元素',查询起始位置)
数组名.lastIndexOf('元素') 从结尾开始
查找没有则返回-1
转换为字符串
toString() 把数组转换成字符串,逗号分割每一项
join('分隔符') 把数组中的所有元素转换成为一个字符串
字符串对象
基本包装类型
把简单数据类型包装成复杂数据类型,用一个temp过度,所以,基本数据类型也有了属性和方法
字符串的不可变
每次赋值都是用一个新的内存空间,原本的字符串内容不会有变化
根据字符串返回位置
例:
var num = 'aobcosduofho';
var index = num.indexOf('o');
while (index !== -1) {
console.log(index + 1);
index = num.indexOf('o',index + 1)
}
根据位置返回字符
数据名.charAt(位置) 返回指定位置的索引号
数据名.charCodeAt(位置) 返回指定位置的ASCLL码
数据名[位置] H5新增
字符串操作方法
concat('字符串1',’字符串2‘...) 衔接连个字符串成一个
substr(截取的起始位置,截取几个字符) 截取对应位置,对应长度的字符串
replace(’a‘,’b‘) 把字符串中的a替换成b,只替换一个
split(’分隔符‘) 字符串转换为数组
简单类型与复杂类型
简单类型(值类型)
string、number、Boolean、undefined、null 放在栈中 对象 — 栈
复杂类型(引用类型)
通过new创建对象,Object、Array、Date 放在堆中 对象 — 栈(地址)—堆