常用ES6新特性
let、const
let(作用与var类似,用于声明变量)
- let 不能重复声明变量,var 可以重复声明变量;
let name = "lanlan";
let name = "lanlan";
// 不可以重复定义
// Uncaught SyntaxError: Identifier 'name' has already been declared
- 作用域:es6中引入了块级作用域,let声明的变量在块级作用域
{}内有效
for (let i = 0; i < 10; i++) {}
console.log(i);
// index.html:53 Uncaught ReferenceError: i is not defined
- let声明的变量不存在var的变量提升问题
- let不能在定义之前访问该变量,并且不能被重新定义。
let name="lanlan"
// index.html:50 Uncaught ReferenceError: Cannot access 'name' before initialization
const
- const 变量必须在声明时赋值,但不能重新赋值
// 错误写法
const name;
name = "lanlan";
// 正确写法
const name = "lanlan";
- 一旦声明,常量的值就不能改变。
- const 声明的变量如果是基本类型,那么不允许改变,如果是引用类型,那么只要不改变引用的地址就是可以的
解构赋值
数组解构
数组解构就是能快速提取数组中的指定成员(数组的某一项值或所有的值)
- 解构赋值都是一一对应的,按照顺序。
const arr = ["haha", "hehe", "hoho"];
let [res1, res2, res3] = arr;
console.log("res1-----", res1); // haha
console.log("res2-----", res2); // hehe
console.log("res3-----", res3); // hoho
- 也可以取数组的某一项值(结构必须保持一致)
const arr = ["haha", "hehe", "hoho"];
const [, , name] = arr;
console.log(name); // hoho
对象解构
对象解构和数组解构基本类似,只不过对象解构的取值方式是根据对象的属性名来取值
const obj = {
name: "lanlan",
age: "25",
sex: "女",
};
const { name, age, sex } = obj;
// console.log(name,age,sex); lanlan 25 女
模板字符串
(反引号)内容中可以直接出现换行符,’ '和" "中则不可以,出现会报错
const name="张三";
console.log(`我叫${name}`); // 我叫张三
箭头函数
- 箭头函数 this 指向声明时所在作用域下 this 的值;
- 箭头函数不能作为构造函数实例化;
- 箭头函数不能使用arguments变量,但是可以使用
....fun - 函数体如果只有一条语句,则花括号可以省略,并省略return,函数的返回值为该条语句的执行结果;
总结
- var声明的变量是全局变量,会有变量提升的风险,尽量少用。
- let声明的变量具有块级作用域的特性,即只能在声明的代码块中使用,一定先声明之后才能使用。
- const声明的变量是常量,常量的值不允许更改,如果常量是引用类型,那么可以更改常量内部属性的值。
- 解构就是分解数据结构,赋值就是为变量赋值;在ES6中允许从对象和数组以及任何可以遍历的数据类型进行解构赋值。
- 箭头函数是将函数简化定义的一种方式,将箭头函数赋值给一个变量,变量名就是函数名称,通过调用变量名来调用函数。