ES6补充

作者: 无尾树袋熊 | 来源:发表于2020-03-21 00:54 被阅读0次

常变量关键字

  • 定义变量,常量
//不会覆盖, 并且不允许重复定义
//let定义的变量不会预解析
console.log(num);
let num;
const num = 666;
  • ES6开始新增了一种作用域, 叫做代码块
  • 通过let定义的变量受到代码块的限制, 只能在所属的作用域中使用
  • 注意点:
    • 常量不能修改
    • 常量必须在定义的时候初始化
    • 常量的指向不能改变,但指向内存中的数据可以改变
const arr = [1, 2];
//arr = [2, 4]; //报错
arr[0] = 666;
arr.push(777);
console.log(arr); //666,2,777

字符串模板

  • 添加字符串
var str = `
<li>${obj.name}</li>
<li>${obj.age}</li>
<li>${obj.say()}</li>
`
oUl.innerHTML = str;
  • 新增字符串想关方法
var str = "www.hate996.com";
var res1 = str.includes("996");
var res2 = str.startsWith("www");
var res3 = str.endsWith("com");

解构数组和对象

数组

  • 依次将数组中的内容赋值给等号左边[]中的变量
var arr = [1, 2, 3];
//a=1, b=2, c=3
let [a, b, c] = arr;
  • 如果等号右边的数组和等号左边的内容不对等,没有的就是undefined
//a=undefined,b=2,c=undefined
let [a, b, c] = [, 3, ];
  • 解构数组的时候,可以指定默认值
//a=666,b=2,c=undefined
let [a=666, b, c] = [, 2, ];

对象

  • 会将对象中和属性名称和解构中变量名称一致的赋值给解构的变量
let obj = {
    name: "yz",
    age: 18
};
<!--name=yz,age=18,gender="male"-->
let{name, age, gender="male"} = obj; 
  • 应用场景
//简化代码
let obj = {
    name: "yz",
    age: 18
};
say(obj);
function say({name, age}){
    console.log(name, age);
}
  • 高级使用
var arr = [
    {name:"yz", age:18},
    {name:"zx", age:15},
    {name:"zx", age:10},
];
let [{name},{age}] = arr;
//name=yz,age=15
console.log(name, age);

函数的默认参数

function sat(name = "yz", age = -1){
    console.log(name, age);
}
<!--name=yz,age=-1-->
say();
  • 应用场景

某一个函数的某些参数永远都是一些固定的值,获取用于都是通过其它函数获得的,那么就可以使用默认参数

function Car(id){
    this.id = id;
}
function creatCar(id = getRandom()){
    return new Car(id);
}
function getRandom(){
    return Math.random() * 10000;
}
var c1 = creatCar();
console.log(c1);

扩展运算符

  • 可变参数的注意点:可变参数必须在参数列表的最后
function sum(a, ...ags){
    //a=10,ages=arr(2)
    console.log(a, ags);
    var sum = 0;
    for(var i = 0, len = ags.length; i < len; i++){
        sum += ags[i];
    }
    return sum;
}
//50
console.log(sum(10, 20, 30));
  • 会将数组中的元素逐个取出来赋值给形参
    var arr = [1, 2, 3, 4, 5];
    var res = sum(...arr);
    console.log(res); //15

    function sum(...ags){
        var sum = 0;
        for(var i = 0, len = ags.length; i < len; i++){
            sum += ags[i];
        }
        return sum;
    }
  • 合并数组
var arr1 = [1, 3, 5];
var arr2 = [2, 4, 6];
//ES6之前:
//var res = arr1.concat(arr2);
var res = [...arr1, ...arr2];
//[1, 2, 3, 4, 5, 6]
console.log(res);

箭头函数

  • 格式:
    • let 函数名称 = (形参列表) => {函数体}
  • 作用:简化代码,修改函数中的this
  • 注意点:
    • 如果函数体中只有一句代码, 那么{}可以省略
    • 如果函数形参列表中只有一个形参, 那么()可以省略
    • 如果函数体中只有一句代码, 并且是返回值,那么return可以省略
let say1 = () => console.log("hello");
let say2 = name => console.log(name);
let num = (a, b) => a + b;

this

  • ES6没有this这个概念,会从所在的作用域链的上一层继承this
  • 应用场景:让setTimeout/setInterval中的this变为我们想要的this
//ES6之前
setTimeout(function () {
    console.log(this);// window
}, 1000);
//ES6之后
setTimeout(()=>{
    console.log(this); // Person
}, 1000);
    function Student() {
        this.age = 666;
        // this.say = function () {
        //     // 谁调用就是谁
        //     // 可以被call/apply/bind方法修改
        //     console.log(this);
        // }
        this.say = ()=>{
            // 从上一级的作用域继承
            // 不可以被call/apply/bind方法修改
            // 因为箭头函数自己没有this
            // 因为箭头函数中的this只看定义, 不看调用
            console.log(this);
        }
    }
    var stu = new Student();
    stu.say();
    // stu.say.call({name:"zs"});
  • 箭头函数中不能使用arguments
let test = () => console.log(arguments);
test(1, 3, 5);//报错

增加对象字面量

function creatPerson(name, age){
    var obj = {
        name,
        age,
        say(){
            console.log(name, age);
        }
    }  
    return obj;
}
var p = creatPerson("yz", 18);
p.say();

ES6的类

  • ES6开始提供了一个关键字, 专门用于定义类 class
class Person{
    // 构造函数, 创建对象时系统会默认执行
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
    say(){
        console.log(this.name, this.age);
    }
    static eat(){
        console.log("吃饭");
    }
}
let p = new Person("zx", 18);
p.say();
p.eat();

ES6的继承

  • 在子类后面添加extends 类名
class Person{
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
    say(){
        console.log(this.name, this.age)
    }
}
class Student extends Person{
    constructor(name, age, score){
        //利用super将父类的属性传递给父类
        super(name, age);
        this.score = score;
    }
    eat(){
        console.log("吃饭");
    }
    //在ES6中,可以重写父类的方法
    say(){
        console.log(this.name, this.age, this.score);
    }
}
let s = new Student("zx", 18, 99);
s.eat();
s.say();

相关文章

  • ES6补充

    常变量关键字 定义变量,常量 ES6开始新增了一种作用域, 叫做代码块 通过let定义的变量受到代码块的限制, 只...

  • ES6补充

    自执行函数 定义一个自执行函数,函数定义完成后,自己执行一次,函数名可以省略,因为没有任何意义 注意:要以分号结束...

  • ES6补充

    一、自执行方法 一般情况下定义一个函数,都要调用这个函数,才会执行,例:fun()就是调用执行fun()函数的意思...

  • 学习webpack记录

    现在在用JavaScript练习算法题,用到大量ES6语法特性,在补充ES6语言基础的同时,实在觉得nodejs内...

  • Day2. JSX核心语法一, 跟着Demo入门JSX

    一. Javascript类的定义 JS语法补充 ES5中定义类 class ES6开始才有的关键字 ES6中通过...

  • 近一万字的ES6语法知识点补充

    原文链接分享在我的掘金账号上近一万字的ES6语法知识点补充 前言 ECMAScript 6.0(简称ES6),作为...

  • Array方法属性

    ECMAScript 5 Array新增方法 明天再抽时间补充ES6 Array新增方法~~~

  • 2-4【微信小程序全栈开发课程】ES6知识点详解--创建conf

    ES6是JavaScript的一个版本,因为我们前面用到的vue默认使用ES6语法开发,所以我们在这一节补充ES6...

  • ES6语法知识点补充

    前言 本文讲着重是对ES6语法特性的补充,不会讲解一些API层面的语法,更多的是发掘背后的原理,以及ES6到底解决...

  • 手写实现继承

    这里就只实现两种方法了,ES6之前的寄生组合式继承 和 ES6之后的class继承方式。 补充一个小知识, ES6...

网友评论

    本文标题:ES6补充

    本文链接:https://www.haomeiwen.com/subject/asyeyhtx.html