es6

ECMAScript 6.0(ES6)是JavaScript语言的新标准,在 2015年 正式。使得 JavaScript 语言更像一门后端语言,可以完成一些复杂的企业应用。

变量声明

在以往我们使用 var 来声明变量, 不管什么类型我们都是使用 var

在 es6 中我们可以使用 let 来声明局部变量,使用 const 来声明常量.

let

//声明一个为 name 的变量
let name = "abc";
let 的作用域相对于花括号,不在是函数
let arr = [1,2,3,4];
for(let i = 0; i < arr.length; i++){
	console.log(i);
}

console.log(i); // error
在 es6 中使用 let 声明的变量已经修复了变量作用域的bug,以往使用 var 在 for 循环中声明的变量,for 循环外面使用能读取到的。

不存在变量提升

let 修复了变量提升这个 bug
alert(name); //error
let name = "123";

const

const 声明的变量为常量,一旦声明将不可更改
const PI = 3.14;
PI = 3; //error  常量不可修改

解构赋值

Array

从数组中获取对应下标的元素
let array = ["a","b","c"];
let [a,b,c] = array;

// a : "a"
// b : "b"
// c : "c"

Object

let obj = {
	"name" : "张三",
	"age"  : "22"
	"sex"  : "男"
};
let { name,age,sex } = obj;

// name : "张三",
// age  : "22"
// sex  : "男"

行参解构赋值

行参在内部也是一个赋值的过程,所以也可以使用解构赋值。
function sum([x,y,z]){
	return x + y + z;
}

sum([1,2,3]);

获取剩余的所有的元素

let [first,..remaining] = ["a","b","c","d","e"];

// first => "a"
// remaining => [b","c","d","e"]

默认值

默认值是在赋值时如果没有制定具体的值,就会使用声明时指定的默认值

函数的默认值

function fun(a = 1 , b = 2){
	return a + b;
}

fun(); // => 3

fun(10); // => 12

解构赋值的默认值

let [a,b = "b"] = ["a"];

// a => "a"
// b => "b"

模版

在 es6 中新加了一个语法躺,模版,以往我们做字符串拼接时往往会写上很多单引号与双引号,现在来看看 es6 是如何处理这个事的.
let name = "张三";
let age = 22;

let str = `姓名:${name}, 年龄:${age}岁`;
//str = 姓名:张三, 年龄:22

Set

ES6中的新数据结构。它类似于数组,但是成员的值都是唯一的,不会有重复的值。
let set = new Set();

set.add("a");
set.add("b");
set.add("c");
set.add("a"); //已经存在的不会继续添加,且不会覆盖

// a,b,c
// 重复的数不会出现
let set = new Set();
set.delete(value); //删除一个元素,根据值删除,非下标

set.has(value);    //判断元素是否存在

set.clear();       //删除所有元素

set.size;          //元素个数

set forEach

let set = new Set();
set.add("a");
set.add("b");

set.forEach(function(item) {
	// item => 循环的当前元素
});

Map

Map 是只能有一层数据的键值对,是 object 格式的数据,因为 object 键值只能是数字,给它带来了很大的不便,es6 中给做了优化,键值不在只是字符串了。
let map = new Map();

map.set("a" , { 
	"a" : 1
});

map.get("a"); // => { "a" : 1 }

map.has("a"); // true 如果 map 中存在 a 即返回 true,否则返回 false

map.delete("a"); // 如果 a 存在,删除后返回 true,否则返回 false

map forEach

let map = new Map();
map.set("a","a");
map.set("b","b");

map.forEach(function(item) {
	// item => 循环的当前元素
});

map keys

返回所有键名, 所有的键值以数组的形式返回
let map = new Map();
map.set("a","1");
map.set("b","2");

let [...keys] = map.keys();  
console.log(keys);  // [ a, b ]

map values

返回所有 value , 所有的值以数组的形式返回
let map = new Map();
map.set("a","1");
map.set("b","2");

let [...values] = map.values();  
console.log(value); // [ 1, 2 ]