一、概念
ES6:ESMAScript6,新的javascript语法标准,2015年正式推出,为了js更加快捷与方便
二、变量声明
var:全局作用域
函数作用域
没有if,switch,for,while,do,else作用域
会变量提升
let:1.局部作用域(在一对{}启用)
2.不能变量提升
3.在一个作用域里面不能重复声明
const:1. let 一样
2. 变量名建议大写
3. 声明必须赋值
4. 值类型不允许修改
三、解构
把数组,对象,解构为单独的变量
- 数组
var [a,b,,c=20,...rest]=[1,2,3,4,5,6];
- 对象
var {name,age,leg=20,...rest} = obj;
四、let
- var 可以声明变量
- let 同样可以声明局部作用域变量(在一对{}启用)
- let 局部变量
- 不能重复声明
- let不能变量提升
var lis = document.querySelectorAll("ul li");
for(let i=0;i<lis.length;i++){
lis[i].onclick = function(){alert(i)}
}
var h1 = document.querySelector("h1");
for(let i=9;i>=1;i--){
//延迟10-i秒执行
setTimeout(function(){
//设置文本值为i
h1.innerText = i;
},(10-i)*1000);
}
五、const
特点:
- const 是局部变量
- 声明必须赋值
- 不能重复声明
- 建议大写
- 不会变量提升
- 值类型不能修改
什么时候使用const
- 当声明变量不允许修改的时候,是个常量的时候
- 当这个对大概率不会被改变(选择DOM节点)
{
const PI = 3.1415926;
const PI;
console.log(PI);
}
{
const LIST = ["I","Hate","You"];
LIST.push("LOve");
console.log(LIST);
}
六、深拷贝
深拷贝,值类型,与引用类型都拷贝(互相不影响)
浅拷贝,值类型拷贝,引用类型是引用
function deepCopy(obj){
//如果typeof 值是object并且不是null
if(typeof obj === 'object'&&obj!=null){
var result;
//如果是数组
if(obj instanceof Array){
result = [];
//遍历数组,执行拷贝
for(var i=0;i<obj.length;i++){
//当前下标的值是执行深拷贝的结果
result[i]=deepCopy(obj[i])
}
}else{
//如果是对象
result = {};
for(var k in obj){
//执行遍历深拷贝对象
result[k] = deepCopy(obj[k])
}
}
//返回的结果
return result;
}else{
//值类型活着null活着 函数直接返回
return obj;
}
}
七、浅拷贝
深拷贝,值与引用类型都拷贝
var obj = {name:"mumu",age:18,friend:["A","B","C"]}
var obj1 = {};
for(var k in obj){
obj1[k] = obj[k];
}