在工作中我们或多或少都会用到es6的一些语法,比如let、const、forEach、map、解构赋值等等;那么他们和es5又有什么区别呢?我的感觉是,es6相对于es5的话可以极大的减少代码量,使其开发更加的优雅、简洁、可读性等等;
ES6官网文档:文档
let 声明变量
1、 ES6 中的let命令,用来声明变量。它的用法类似于var,但是只会在let命令所在的代码块内有效。
分析: 在以下的这串代码中我们去运行时会发现,他会报错;报错内容是textlet这个变量没有声明;其原因就是上面说到的 let 命令需要在代码块中使用才有效;
所以我们只需要将console.log(textlet)放置在花括号中即可打印出我是let
{
let textlet = '我是let'
}
console.log(textlet);
报错:报错内容是textlet这个变量没有声明
ReferenceError: textlet is not defined
2、 let不允许在相同作用域内,重复声明同一个变量。
{
let textlet = '我是let'
let textlet = '我是第二个let'
console.log(textlet);
}
报错:标识符 textlet 已经声明
SyntaxError: Identifier 'textlet' has already been declared
分析: 如果我们在全局或者在其他的作用域上声明textlet这边变量是没有问题的;原因是在作用域中不能重复声明一个变量
{
let textlet = '我是let'
console.log(textlet);
}
let textlet = '我是第二个let'
console.log(textlet);
打印出来的值:
我是let
我是第二个let
3、 其他的方法大家就自己去看看吧!给大家说说一个经典的案例
3-1、 首先我们来看看使用var的情况下使用
let testlet = document.querySelectorAll('.test-let')
console.log(testlet);
for(var i in testlet) {
testlet[i].onclick = function() {
testlet[i].style.background = 'red'
}
}
报错:未捕获的类型错误:无法设置未定义的属性(设置“背景”)
Uncaught TypeError: Cannot set properties of undefined (setting 'background')
at testlet.<computed>.onclick
分析: 原因是var是全局变量;他在执行的时候就会将i进行++;然后当你在执行的时候i的值已经是最后一个,然后在执行了++;导致结果找不到这个数组中的参数
这个时候我们将var 转为let即可;如一下代码
for(let i in testlet) {
testlet[i].onclick = function() {
testlet[i].style.background = 'red'
}
}
彩蛋:如果你不想用let,就想用 var 的话;只需要将testlet[i]转为this即可;原因自己去查,不做太多的解释
解构赋值
1、 变量解构赋值
let [a,b] = [1,2]
console.log(a);
console.log(b);
结果:
1
2
今天先到这儿了...