什么是ES6 ?
es6的全名是ECMAscript 2015
Es6有哪些新特性?
一、let
1. 没有变量提升
console.log(a);
let a = 4;
// a is not defined
2. 不能重复申明
let a = 4;
let a = 5;
console.log(a);
// Identifier 'a' has already been declared
3. 临时失效区(暂时性死区)
var a = 5;
function fn(){
console.log(a);
let a = 4;
}
fn();
// a is not defined
二、const
在Es6之前,如果我们想定义常量,通常由程序员自己约定
var NUM = 100;
将所有字母都大写的变量约定为常量,但本质还是变量
let 和 const 声明的变量不挂在window上
三、class 类
在Es6之前,我们要定义一个类,只能通过function来模拟
function Person(){
this.name = 'xxx';
}
Person.prototype.say = function(){
}
var person = new Person();
1.语法
class Person{
constructor(name){
this.name = name;
}
say() {
console.log(this.name);
}
}
var person = new Person();
person.say();
四、Set 集合
Set是一个不能有重复元素的集合,重复添加无效
var s = new Set();
s.add(1);
s.add(2);
// s.delete(2) 删除
// s.clear() 清空
// s.size() 长度
1.遍历Set
var keys = s.keys(); // 返回一个迭代器
for(var k of keys){
console.log(k);
}
var values = s.values();
for(var v of values){
console.log(v);
}
var entries = s.entries(); // 将key和value 组合成一个数组返回
for(var e of entries){
console.log(e);
}
如果我们想在Es6之前使用给数组去重
2.Array数组去重问题
方法一:
var arr = [1,2,3,4,1,1,1];
function fn(arr){
var map = {};
var newArr = arr.filter(function(item, index){
if(!map[item]){
map[item] = true;
return item;
}
});
return newArr;
}
fn(arr);
方法二:
var arr = [1,2,3,4,1,1,1];
function fn(arr){
var newArr = [];
for(var i = 0; i < arr.length; i++){
if(newArr.indexOf(arr[i]) === -1){
newArr.push(arr[i]);
}
}
return newArr;
}
fn(arr);