ES6中几个常用的特性

let和const命令

es6中新增了块级作用域,大致理解就是一对花括号中的代码域就是一个块级作用域。而let声明的变量只在当前块级作用域中有效。与var不同的是,var声明变量会产生变量提升,而let所声明的变量一定要在声明后使用,否则报错。而且let不允许在相同作用域内,重复声明同一个变量。

{
  let a = 10;
  var b = 1;
}
a // ReferenceError: a is not defined.
b // 1

const声明一个只读的常量。一旦声明,常量的值就不能改变。这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。它与let声明相同,只在声明所在的块级作用域内有效。

箭头函数

ES6 允许使用箭头(=>)定义函数
箭头函数对于使用function关键字创建的函数有以下区别:
1.箭头函数没有arguments
2.箭头函数没有prototype属性,不能用作构造函数(不能用new关键字调用)
3.箭头函数没有自己this,它的this是词法的,引用的是上下文的this,即在你写这行代码的时候就箭头函数的this就已经和外层执行上下文的this绑定了

var f = () => 5;
// 等同于
var f = function () { return 5 };

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
  return num1 + num2;
};

变量的解构赋值

解构赋值属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。如果解构不成功,变量的值就等于undefined。

let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3

let [ , , third] = ["foo", "bar", "baz"];
third // "baz"

let [x, , y] = [1, 2, 3];
x // 1
y // 3

let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]

let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []

let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"

对象属性和方法简写

对象属性的简写

es6允许当对象的属性和值相同时,省略属性名,需要注意的是:
1.省略的是属性名而不是值
2.值必须是一个变量

function f(x, y) {
  return {x, y};
}

// 等同于

function f(x, y) {
  return {x: x, y: y};
}

f(1, 2) // Object {x: 1, y: 2}
对象方法的简写

es6允许当一个对象的属性的值是一个函数,可以使用简写的形式

const o = {
  method() {
    return "Hello!";
  }
};

// 等同于

const o = {
  method: function() {
    return "Hello!";
  }
};

模板字符串

模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。

// 普通字符串
`In JavaScript '\n' is a line-feed.`

// 多行字符串
`In JavaScript this is
 not legal.`

console.log(`string text line 1
string text line 2`);

// 字符串中嵌入变量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`

更多详情参照阮一峰的ES6入门

你可能感兴趣的:(es6)