qqxu
6/13/2018 - 10:19 AM

ES6

  1. 常量 ----只读
// ES5的写法
Object.defineProperty(window, "PI2", {
  value: 3.1415926,
  writable: false,
})

// ES6的写法
const PI = 3.1415926;


  1. 作用域
{}

  1. 箭头函数
// ES5
var evens = [1, 2, 3, 4, 5];
var odds = evens.map(function(v) {
  return v+1;
})
console.log(evens, odds);


// ES6
let evens = [1, 2, 3, 4, 5];
let odds = evens.map(v => v+1);
console.log(evens, odds);

// ES6中小括号中传入的参数,如果只有一个则可以省略括号。
// 花括号中的表达式直接作为返回值时,可以省略花括号

() => {
  
}


  1. 默认参数
// ES5

let f = function (x, y, z) {
  x = x || 1;
  y = y || 2;
  z = z || 3;
  return x+y+z;
}
console.log(f(), f(3,4));

//ES6
let f = (x = 1, y = 2, z = 3) => x+y+z;
console.log(f(), f(3,4));


// 可变参数累计和 ES5
function f() {
  var a = Array.prototype.slice.call(arguments);
  return a.reduce((i, j) => i+j);
}

console.log(f(1,3));


// 可变参数求累计和ES6
function f(...a) {
  return a.reduce((i, j) => i+j);
}

console.log(f(1,3));


// ES5 合并数组
var params = [1, '4', '3333'];
var other = [1, '4'].concat(params);
console.log(other);   // [1, "4", 1, "4", "3333"]

// ES6 合并数组
var params = [1, '4', '3333'];
var other = [1, '4', ...params];
console.log(other);   // [1, "4", 1, "4", "3333"]

// ES6利用扩展运算符对象
var params = {
    a: 1, 
    b: '4', 
    c: '3333'
};
var other = {
    a: 3, 
    b: '4', 
    ...params
}; 

console.log(other);  //后面的值覆盖了前面{a: 1, b: "4", c: "3333"}
  1. 对象代理

let Person = {
  name: 'es6',
  sex: 'male',
  age: 15
};

let person = new Proxy(Person, {
  get(target, key) {
    return target[key];
  }
  set(target, key, value) {
    if(key!=='sex') {
      target[key]=value;
    }
  }
})

console.table({
  name: person.name,
  sex: person.sex,
  age: person.age,
})

try {
  person.set = 'female';
} catch(e) {
  console.log(e);
} finally {
  
}