拜托,学习ES6新特性超棒的好叭(持续更新-ing)!!

141 阅读4分钟

一、let和var声明变量区别

  1. let声明的变量不可以重复声明,var可以
  2. let变量具有块级作用域,即只在当前代码块中有效;var变量不具有块级作用域,会声明到全局window上。
{
    var name = "zcm";//全局
    let height = "176";//块级
}
console.log(name);//zcm
console.log(height);//error
  1. let声明变量不存在变量提升,即不允许在变量声明之前使用该变量;var变量具有变量提升,当使用某个变量时间,会首先从全局中检索到(如果在之后定义了该变量)。
console.log(name);//undefined
var name = "zcm"console.log(height);//error
let height = "176"

二、const常量

  1. const需要用来声明常量,必须赋予初始值(常命名大写);
const NAME = "zcm"
  1. 常量的值不可以修改(仅对于基础数据类型,如字符String、数字Number)
  2. 常量与let一样具有块级作用域;
  3. 常量对于数组、对象的值可以进行修改;(工作中可多使用const定义数组和对象,避免后续误操作)

三、 变量的解构赋值

解构赋值解释:ES6中允许开发者,以一种特殊的规则模式从变量中取值并进行赋值,这种方式称之为"解构赋值"。

  1. 数组的解构。
const tempArr = ["zcm","wcs","srz"];
const [zcm,wcs,srz = "hxl"] = tempArr;
console.log(zcm,wcs,srz);//zcm wcs srz
  1. 对象的解构。
const tempObj = {
    name:"zcm",
    sex:"man",
    hanshu:function(){
        console.log("我是函数")
    }
}
const {name,sex,hanshu} = tempObj;
console.log(name,sex,hanshu);

//示例解构console对象,解构出log,后续打印可直接使用log
const {log} = console;
log("我将console对象中的log解构出来了")

四、 模板字符串

模板字符串通过反引号``,进行声明使用;

  1. 模板字符串使用更加便捷有效,内容中允许出现换行符;
//若使用双引号、单引号,会出现语法错误
var str = `好好学习,

    天天向上`
  1. 模板字符串变量拼接,语法:${变量名}
var name = "zcm";
var who = `${name}是一个大帅哥`

五、 ES6对象的简化写法

允许直接在对象的大括号中,写入变量和函数,作为对象的属性和方法。

let name = "zcm";
let height = "176";

let obj = {
    name,
    height,
    myheight:function(){
        consoel.log("繁琐函数写法")
    },
    myname(){
        console.log("简化函数写法")
    }
}

六、 箭头函数

let fn = (a,b)=>{
    return a+b;
}

//箭头函数特性
//特性1:箭头函数的this是静态的,始终指向声明箭头函数所在的作用域下this的值;call,apply无法该百年箭头函数的this指向(重要)
window.name = "zcm";
const MY = {
    name:"zcm-copy"
}
//声明普通函数和箭头函数
function getName(){
    console.log(this.name)
}
let getName1 = ()=>{
    console.log(this.name)
}
//改变函数this指向
getName.call(My);//打印zcm-copy,普通函数被改变了this指向
getName.call(MY);//打印zcm,箭头函数始终this指向声明时作用域

//特性2:箭头函数不能作为实例化对象
//特性3:箭头函数不能使用arguments参数
let fn = (a,b,c)=>{
    console.log(arguments)
}
fn(1,2,2);//报错,无法打印arguments

//箭头函数的简写形式
1)参数只有一个时,可省略();
2)当代码语句体只有一句话的时候,可以省略花括号{}

七、 ES6中rest参数

rest参数是用于获取函数的实参(获取的参数是一个数组),用来代替ES5中arguments(获取的参数是一个伪数组,获取参数不可使用数组的方法)

//ES5获取实参
function getArguments(){
    console.log(arguments)
}
getArguments(1,2,2,3,4);//打印一个伪数组

//ES6获取实参: 注意rest参数必须放在参数最后
function getRest(a,b,...rest){
    console.log(a,b,rest)
}
getRest(12,2,sdfsdfsdf,sdfsdfsdf)

八、 ES6扩展运算符spread

扩展运算符使用“...”,可以将数组转化为逗号连接的参数序列。

//用途1:数组的合并;
let arr1 = [1,2,3];
let arr2 = [4.5,6];
let arr3 = [...arr1,...arr2];//[1,2,3,4,5,6]

//用途2:数组的克隆(浅拷贝基本数据类型);
let arr4 = [7,8];
let arr5 = [...arr4];
console.log(arr5);//[7,8]

//用途3:将伪数组转化为真数组;
假设arrTemp是一个伪数组,直接使用[...arrTemp]即可。

九、ES6新增数据类型Symbol(个人感觉不常用)

Symbol是一种新的数据类型,用来表示独一无二的值,用来解决变量名冲突的问题。

//1.Symbol创建
let s = Symbol();
let s1 = Symbol("描述文字");

//2.Symbol.for()创建
let s2 = Symbol.for("描述文字1")

//3.Symbol不可以与其他数据类型做运算
//巧记数据类型:ussonb

//Symbol的使用示例
1.给对象添加独一无二的属性或方法
let mysymbol1 = Symbol("mysymbol1");
let mysymbol2 = Symbol("mysymbol2");
let mine = {
    name:"zcm",
    [mysymbol1]:"176",
    [mysymbol2]:function(){
        console.log("我要说话")
    }
}
//调用
console.log(mine[mysymbol1]);
mine[mysymbol2]();