展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

ES6简单入门

前言

  • 有关ES6详情参考
  • ES6是ECMAScript6,js的核心是ECMAScript

入门

  • var声明的变量作用域为全局

  • ES6新增了let,声明的变量作用域为代码块,也即是作用域为某个函数,因此在同一个函数中不可以重复声明同一个变量;且不存在变量提升

  • const声明一个只读的常量,声明后不可改变,只有在块级作用域中有效,只有在声明后使用

  • 解构赋值

# 数组解构赋值
  let [a, b, c] = [1, 2, 3];   //左边的变量会赋对应的值
  let [x, , y] = [1, 2, 3];    // 解构不成功,变量的值为undefined
  let [x, y] = [1, 2, 3];    //不完全解构(只解构一部分),解构会成功

# 对象的解构赋值
  const user = {
	username: "狗蛋",
	age: 20,
	sex: 1,
	status: 200
  }
  const {age, sex, username} = user   //不完全解构赋值,这里将user对象赋值给 {age, sex, username}

# 字符串的解构赋值
  const [a, b, c, d, e] = 'hello';
	
# 数值和布尔值的解构赋值
	
# 函数参数的解构赋值
	
  • 为函数参数设置默认值
 function Point(x = 0, y = 0) {  //直接写在参数后面
	this.x = x;
	this.y = y;
 }

  • 函数参数设置默认值与解构赋值结合
  function m1({x = 0, y = 0} = {}) {
    return [x, y];
  }

  • 函数的参数设置了默认值建议放在尾部,因为函数传参是从左往右赋值
  function f(x, y = 5, z) {   //这里设置了默认值的参数没有放在尾部
    return [x, y, z];
  }
  f() // [undefined, 5, undefined]
  f(1) // [1, 5, undefined],传的参数赋给了x
# 函数的参数在指定默认值后,length属性将由1变成0

  • rest参数可以看成一个数组,可以传入多个参数,写法更加简洁
  function add(...values) {
  
  }

  • 箭头函数
  var f = v => v;      //箭头前表示参数,箭头后表示返回值
  var sum = (num1, num2) => num1 + num2;  //多个参数用小括号
# 代码块部分多余一条语句则需用大括号括起来
# 返回的是一个对象时,需用小括号括起来

  • 扩展运算符:将一个数组转为用逗号分隔的参数序列
  const numbers = [4, 38];   //有一个数组numbers
  add(...numbers)    // 42,这里的add方法是将传入的参数相加,那么这里使用扩展运算符,将数组转为参数,即是数组中所有值相加

# ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法
  var username       //这是一个变量
  const user = {     //这里将变量作为对象的属性写在大括号中
    username: "狗蛋",
    age: 20,
    sex: 1,
    status: 200
  }

  • js的数据类型
# undefined  null  boolean  String  number  object  Symbol
# 为了区分变量和属性使用类型symbol,属于该类型的属性是独一无二的
  let s = Symbol();    // 通过symbol函数生成变量s
  let mySymbol = Symbol();   // 生成一个变量作为属性
  // 第一种写法
  let a = {};
  a[mySymbol] = 'Hello!';
  // 第二种写法
  let a = {
    [mySymbol]: 'Hello!'
  };

  • Set和Map数据结构
  const s = new Set();   # 创建一个Set数组s,存储的值不可重复,add()方法可向数组添加值,Set()函数可接收一个数组用于初始化
  const m = new Map();   # 创建一个Map数组m,set()方法添加键值对,get()方法读取某个键值对,delete()删除

  • Promise对象
  const promise = new Promise(function(resolve, reject) {    //创建promise对象实例
    // ... some code
    if (/* 异步操作成功 */){
      resolve(value);     //该函数将实例的状态从'未完成'变成'成功'
    } else {
      reject(error);    //该函数将实例的状态从'未完成'变成'失败'
    }
  });
   
  promise.then(function(value) {    //then方法分别指定resolved状态和 rejected状态的回调函数
    // success
  }, function(error) {
    // failure
  });

# ES6的遍历器是一种接口,一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令 for...of 循环

# async 函数返回一个 Promise对象,可以使用 then方法添加回调函数。当函数执行的时候,一旦遇到 await 就会先返回,等到异步操作完成,再接着执行函数体内后面的语句

  • ES6中class
  class Student {
      //无参构造函数
      constructor() {
          
      }
      constructor(name, age) {   //有参构造器
          this.name = name
          this.age = age
      }
      sayName() {  //普通方法
          return this.name
      }
  }
  const student = new Student("狗蛋")   //创建实例
  console.log(student.sayName())

  // ES6 class的继承
  class Point {
  }
  class ColorPoint extends Point {
  }

  # nodejs中
  # 方式一:
  module.exports = {   // 封装为一个对外的接口,可通过require方法引入
  	//模块的具体实现
  }
  const 模块名 = require('./要导入的模块路径')
  # 方式二:
  exports.模块名 =  function ( ){};  
  const 模块名 = require("./模块路径");
  # 区别:
  # exports 返回的是模块函数
  # module.exports 返回的是模块对象本身,返回的是一个类
  # exports的方法可以直接调用
  # module.exports需要new对象之后才可以调用

  # ES6中
  # 方式一:
  exprot {方法一,方法二}     //自定义模块
  Import {方法一,方法二} from "./模块所在路径"
  # 方式二:
  export { 方法名 as 别名 }   //定义模块时设置别名
  import { 别名 } from "./test.js";   // 引入时
  export { 方法名 }
  import { 方法名 as 别名 } from "./test1.js";   //也可以在引入时设置别名
	
  • js中的变量
    函数中定义的局部变量在调用执行后被销毁
    而循环等中的变量是不会被销毁的,没有块作用域
    函数方法中定义的变量未用var申明,则为全局变量

  • Java中的可变参数

  public static void test(String... args) {   //最后一个形参前加上三点 …,就表示该形参可以接受多个参数值,多个参数值被当成数组传入
        for(String arg : args) {
            System.out.println(arg);
        }
  }

# 只有函数的最后一个参数可作为可变参数,其前可有其他普通参数,所以函数只能有一个可变参数
# 可变参数会被转化为一个数组

# Java 中的迭代器iterator相当于一个容器,可用于遍历操作集合

  • ES6对象增强

  • 当key和value一致时,可忽略后面的value

  • 模板字符串

  var str = "My age is " + (a + b) + " and I love " + c;      // 字符串拼接的方式
  const str = `My age is ${a+b} and I love ${c}`;       // 使用反撇号的方式拼接,直接用${}传值
# 模板字符串可多行输出,以及使用标签
# ${}中的大括号里可以放入任意的JavaScript表达式进行运算,以及引用对象属性,也可调用函数方法

详情参考

posted @ 2021-06-07 23:14  DogLeftover  阅读(67)  评论(0编辑  收藏  举报