1. let
特性1:同作用域下变量不能重复声明 (var可以,前者覆盖后者)
特性2:块级作用域内有效
也就是说:ES6后作用域,全局作用域,块级作用域(if(){},while(){},for(){},else{}),函数作用域。查找变量由内向外查找。
特性3:不存在变量提升
例如:var声明变量,在代码执行前先收集变量定义在开头
(var song)(不存在编写)
var song= "恋爱达人";
2. 常量const
特性1:不能修改值
特性2:必须附初始值
特性3:对数组和对象内元素修改,不算做对常量修改,不报错。
原因:const本质,不许变量保存的内存地址内的值改变。复杂类型是引用地址所以可以改变。
3. 对象解构
特性:快速声明变量,赋值对象属性
例子:
const zhao = { name:"赵本山", age:"不详", xiaopin:function(){ console.log("我可以演小品"); }, } let {name,age,xiaopin} = zhao; console.log(name); console.log(age); console.log(xiaopin);
4. 对象字面量
特性:赋值对象属性直接写变量,变量名是属性名,变量值是属性值
例子:
let name2 ="沈腾"; let change = function(){ console.log("我们改变你!!"); } let person = { name2, change, } console.log(person.name2); person.change();
5.箭头函数
特性:使用 =>定义函数
例子:
let say = ()=>{ console.log("Hello,World!"); }
特性2:箭头函数this指向函数定义处的this
// 如下:箭头函数this指向,定义处function(){}的this let person = { name:"张三", age:18, say:function (){ let talk = ()=>{ console.log("this is "+this); console.log(this.name); console.log(this.age); } talk(); } } person.say(); // 因为箭头函数没有this,所以使用function(){}的this,functionthis指向调用该函数的对象,也就是person
// 因此,output:this is person , this.name="张三" , this.age=18
特性3:只有一个参数,一行代码(该代码会被当返回值)。分别可省略 () , {}
例子:
let a = n => n*2; let result = a(22); console.log(result);
6. 扩展运算符
特性:...数组,将数组转化为参数序列
const tfboys = ['a','b','c']; let chunwan = (index1,index2,index3) =>{ console.log("index1: "+index1); console.log("index2: "+index2); console.log("index3: "+index3); } chunwan(...tfboys); // chunwan(tfboys[0],tfboys[1],tfboys[2]); // 作用: // 1. 数组合并 const kuaizi = ["王太利","肖央"]; const fenghuang = ["曾毅","玲花"]; const zuhe = [...kuaizi,...fenghuang]; console.log(zuhe);
7. promise对象 和 exprot与import
// promise对象 // 参数: 包含resolve,reject函数参数的函数参数 // 作用:解决异步代码嵌套 // 包含resolve,reject函数参数中resolve,reject作用 // resolve():可以放置一个参数向下个then传值 // 方法: promise.then() // 参数:包含value的函数参数 // value:resolve()传递的值 /* 返回值:如果return new Promise((resolve,reject)={ }) 那么返回值还是 promise */ // export 暴露模块,import 导入模块 // export {变量,变量} // import {变量,变量} from "./xxx.js" let getData = ()=>{ return new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve(1); },1000) }).then((value)=>{ console.log(value); return new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve(2); },1000) }) }).then((value)=>{ console.log(value); }) } export {getData}
8. async和await