let与const

var

  • 变量提升
  • 重复声明
  • 没有块级作用域

let

  • 块级作用域
  • 可改变值
  • 不能重复声明

const

  • 块级作用域
  • 常量
  • 值的引用
  • 初始化时必须赋值

    Object.freeze()

    阻止数据改变。
    当一个对象被冻结的时候,你不能再对它的属性再进行增、删、改的操作。任何试图改变对象的操作都会被阻止,却不会报错。
    例子:

    1. let obj = {
    2. name:"FreeCodeCamp",
    3. review:"Awesome"
    4. };
    5. Object.freeze(obj);
    6. obj.review = "bad"; // obj 对象被冻结了,这个操作会被忽略
    7. obj.newProp = "Test"; // 也会被忽略,不允许数据改变
    8. console.log(obj);
    9. // { name: "FreeCodeCamp", review:"Awesome"}

    箭头函数

    写匿名函数的方式的语法糖

    1. //原本用匿名函数
    2. const myFunc = function() {
    3. const myVar = "value";
    4. return myVar;
    5. }
    6. //箭头函数
    7. const myFunc = () => {
    8. const myVar = "value";
    9. return myVar;
    10. }

    注意:当不需要函数体,只返回一个值的时候,箭头函数允许你省略return关键字和外面的大括号。这样就可以将一个简单的函数简化成一个单行语句。
    例子:

    1. const myFunc= () => "value"

    传默认参数

    例子:

    1. function greeting(name = "Anonymous") {
    2. return "Hello " + name;
    3. }
    4. console.log(greeting("John")); // Hello John
    5. console.log(greeting()); // Hello Anonymous

    …运算符

  • 当…为扩展运算符时,pread操作符主要用于数组构造和解构,在调用时将数组填入函数参数

例子:

  1. function foo(x,y,z) {
  2. console.log(x,y,z);
  3. }
  4. let arr = [1,2,3];
  5. foo(...arr); // 1 2 3
  • 当…为rest运算符时,rest操作符主要用于获得传递给函数的参数列表

例子:

  1. function foo(...args) {
  2. console.log(args);
  3. }
  4. foo( 1, 2, 3, 4, 5); // [1, 2, 3, 4, 5]

解构赋值

对象解构赋值

例子:

  1. //ES5
  2. var voxel = {x: 3.6, y: 7.4, z: 6.54 };
  3. var x = voxel.x; // x = 3.6
  4. var y = voxel.y; // y = 7.4
  5. var z = voxel.z; // z = 6.54
  6. //ES6
  7. const { x, y, z } = voxel; // x = 3.6, y = 7.4, z = 6.54