美文网首页
es6展开运算符及箭头函数

es6展开运算符及箭头函数

作者: 海兔肉夹馍 | 来源:发表于2018-02-11 11:46 被阅读0次

最近一周遇到的项目代码里面有一些es6的语法不是很熟悉,遂查找并理解一番,在此记录一二,本章内容涉及到展开运算符和箭头函数的内容。

展开运算符

展开运算符(spread)是三个点(…),可以将数组转为用逗号分隔的参数序列。如同rest参数的逆运算。

console.log(...[1, 2, 3])
// 1 2 3

console.log(1, ...[2, 3, 4], 5);
// 1 2 3 4 5

[...document.querySelectorAll('div')]
// [<div>, <div>, <div>...]

用于数组字面量:

[...iterableObj, 4, 5, 6]

展开运算符主要用于函数调用,如下:

function func(x, y, z, a, b) {
    console.log(x, y, z, a, b);
}

var args = [1, 2];
func(0, ...args, 3, ...[4]);
// 0 1 2 3 4

用法

1.更强大的数组字面量操作

var parts = ['shoulders', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes'];
// ["head", "shoulders", "knees", "and", "toes"]

2.替换apply方法

function func(x, y, z) { }
var args = [0, 1, 2];

// ES5写法
func.apply(null, args);

// ES6写法
func(...args);

箭头函数

// ES5
var selected = allJobs.filter(function (job) {
  return job.isSelected();
});
// ES6
var selected = allJobs.filter(job => job.isSelected());

// ES5
var total = values.reduce(function (a, b) {
  return a + b;
}, 0);
// ES6
var total = values.reduce((a, b) => a + b, 0);

// ES5
$("#confetti-btn").click(function (event) {
  playTrumpet();
  fireConfettiCannon();
});
// ES6
$("#confetti-btn").click(event => {
  playTrumpet();
  fireConfettiCannon();
});
    

小窍门

// 为与你玩耍的每一个小狗创建一个新的空对象
var chewToys = puppies.map(puppy => {});   // 这样写会报Bug!
var chewToys = puppies.map(puppy => ({})); //

箭头函数没有它自己的this值,箭头函数内的this值继承自外围作用域

// ES5
{
  ...
  addAll: function addAll(pieces) {
    var self = this;
    _.each(pieces, function (piece) {
      self.add(piece);
    });
  },
  ...
}
 // ES6
{
  ...
  addAll: function addAll(pieces) {
    _.each(pieces, piece => this.add(piece));
  },
  ...
}

 // ES6的方法语法
{
  ...
  addAll(pieces) {
    _.each(pieces, piece => this.add(piece));
  },
  ...
}

相关文章

网友评论

      本文标题:es6展开运算符及箭头函数

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