由于ie低版本不兼容es6新语法,所以在使用的使用优先考虑兼容性的问题
如果不考虑兼容的话, 优先推荐使用let/const
let / const
let
写法和var 一致, 用来声明变量
let 和 var 的具体区别
var a = 15;
let b = 1;
var :
let :
let 声明时出错
与let的区别
const b = 10;
b = 20;
console.log(b);
只要是一个对花括号 就是一个块级作用域
块级作用域类似ES5中局部作用域,声明在其中的变量,出了该作用域,失效
<ul>
<li>列表1</li>
<li>列表2</li>
<li>列表3</li>
</ul>
var lis = document.querySelectorAll("li");
for(let i = 0; i < lis.length; i++){
lis[i].onclick = function () {
console.log(this.textContent);
}
}
// 上述for相当于 循环几次,出现几个块级作用域
// 不需要再像最初的var 声明的变量一样 每次都必须保存才能使用过程中的变量
解构赋值
let obj = {
a:1,
b:2
}
通过点语法来访问对象中存储的内容
let b = obj.b;
解构: 解开目标的整体结构
赋值:将目标中的数据 赋值到我们定义的变量中
let {a,b} = obj;
console.log(a,b);
let arr = [1,2,3,4,5];
let [q,w,e,r] = arr;
console.log(q,w);
let str = "abc";
let [d,f] = str;
console.log(d,f);
展开运算符 …
在需要展开的目标前加… ,即可将该目标的值取出
不影响原有数据,对原有数据,做一个拷贝的动作
let arr1 = ["a","b","c","d"];
let arr2 = [1,2,3,...arr1,4,5];
let arr3 = [...arr1,"av"];
console.log(arr3);
console.log(arr1);
剩余参数 : 解构赋值+展开运算符
let obj = {
a:1,
b:2
}
let obj2 = {
...obj,
c:3,
d:4
}
console.log(obj2);
let {a,b,...c} = obj2;
// let a = obj2.a let b = obj2.b
console.log(a,b,c);