常见的几种ES6的简写

对象字面量

对象字面量是指以{}形式直接表示的对象,如下面这样:

var book = {

  name: 'ES6',}

ES6 为对象字面量的语法带来了一些改进:包括属性/方法的简洁表示,可计算的属性名等等.

属性的简洁表示法

var events = { listen: listen } ==> var events = { listen }

可计算的属性名

var expertise = 'journalism'

var person = {

  name: 'Sharon',

  [expertise]: {

    years: 5

  }}

简写属性和计算的属性名不可同时使用。这是因为,简写属性是一种在编译阶段的就会生效的语法糖,而计算的属性名则在运行时才生效。如果你把二者混用,代码会报错。而且二者混用往往还会降低代码的可读性,所以JavaScript在语言层面上限制二者不能混用也是个好事。

方法定义

我们先看看传统上如何定义对象方法;

function print() { alert('ok') }

ES6 的对象字面量方法简写允许我们省略对象方法的function关键字及之后的冒号

ES6简写为: print() { ...}

箭头函数

ES6 为我们提供了一种写匿名函数的新方法,即箭头函数。箭头函数不需要使用function关键字,其参数和函数体之间以=>相连接:

var max = (params) => { params > 100 }

在参数和返回的值都是一个时可以用更为简单的方式表示 var max = params =>  params > 100 

**给函数以合理的命名,有助于增强程序的可读性。箭头函数并不能直接命名,但是却可以通过赋值给变量的形式实现间接命名

尽管箭头函数看起来类似于传统的匿名函数,他们却具有根本性的不同:

· 箭头函数不能被直接命名,不过允许它们赋值给一个变量;

· 箭头函数不能用做构造函数,你不能对箭头函数使用new关键字;

· 箭头函数也没有prototype属性;

· 箭头函数绑定了词法作用域,不会修改this的指向。

如果你想完全控制你的函数中的this,使用箭头函数是简洁高效的,采用函数式编程尤其如此。

[1, 2, 3, 4]

  .map(value => value * 2)

  .filter(value => value > 2)

  .forEach(value => console.log(value))// <- 4// <- 6// <- 8

词法作用域

我们在箭头函数的函数体内使用的this,arguments,super等都指向包含箭头函数的上下文,箭头函数本身不产生新的上下文。

箭头函数的作用域也不能通过.call,.apply,.bind等语法来改变,这使得箭头函数的上下文将永久不变。

解构赋值

ES6提供的最灵活和富于表现性的新特性莫过于解构了。一旦你熟悉了,它用起来也很简单,某种程度上解构可以看做是变量赋值的语法糖,可应用于对象,数组甚至函数的参数。

对象解构

var school = { teacher : 4 , stu: 600},让一个变量teacher指向对象school的teacher,var teacher = school.teacher,

ES6写法:var {teacher} =  school

可以使用var加逗号在一行中同时声明多个变量,解构的花括号内使用逗号可以做一样的事情。

var {teacher, stu} =  school

解构还允许我们使用别名,加上:即可var {teacher:ter, stu} =  school

数组解构

对象解构一样,数组解构也允许你添加默认值:

var name = ['jack','neo']; [ firstName = 'John', , lastName = 'Doe' ] = names

&&& 互换值

[left, right] = [right, left]

函数默认参数

function sum(a = 1, b = 2, c = 3) { }

不过这样做存在一定的问题,当你调用该函数时,如果传入的参数对象只包含一个属性,另一个属性的默认值会自动失效.

函数参数解构

通过函数参数解构,可以解决上面的问题,这里我们为每一个属性都提供了默认值,单独改变其中一个并不会影响其它的值:

function sum({a = 1, b = 2, c = 3} = {}) { return a } ;   sum(); // 1

这样当函数被调用时,如果参数为空,会自动以{}作为参数。

剩余参数和拓展符

ES6之前,对于不确定数量参数的函数。你需要使用伪数组arguments,它拥有length属性,却又不具备很多一般数组有的特性。需要通过Array#slice.call转换arguments对象真数组后才能进行下一步的操作:

Array.prototype.slice.call(arguments).join(', ')

使用剩余参数rest, 你只需要在任意JavaScript函数的最后一个参数前添加三个点...即可。当rest参数是函数的唯一参数时,它就代表了传递给这个函数的所有参数。它起到和前面说的.slice一样的作用,把参数转换为了数组,不需要你再对arguments进行额外的转换了。

//主要用于不定参数,所以ES6开始可以不再使用arguments对象
var bar = function(...args)
  for ( let el of args) { 
  console.log(el); 
 }
}
bar( 1, 2, 3, 4); //1 //2 //3 //4

拓展运算符

拓展运算符可以把任意可枚举对象转换为数组,使用拓展运算符可以高效处理目标对象,在拓展目前前添加...就可以使用拓展运算符了。下例中...arguments就把函数的参数转换为了数组字面量。

function print(a) { return a + b } print(...arr1)

使用拓展运算符,我们也可以把字符串转换为由每一个字母组成的数组:

[...'boj']// <- ['o', 'b', 'j']

使用拓展运算符,还可以拼合数组:

['o', ...strings, 'j']

当你想要取出一个数组的前一个或者两个元素时,常用的解决方案是使用.shift.现在我们可以使用在ES6中,结合使用拓展和解构: 

var [first, second, ...other] = ['a', 'b', 'c', 'd', 'e'] // first= 'a',second = 'b',other = ['c','d','e']

 

 

你可能感兴趣的:(JavaScript,ES6)