ES6

135 阅读2分钟

ES6和js的关系

es6(ECMAscript)是js的规范

1.let const (声明变量和常量)

var: 属于函数作用域(在function内)

  • 存在变量提升 let:属于块级作用域(对应一个“{}”内就是一个块级作用域)
  • 不存在变量提升
  • 同一个作用域下不能重复定义同一个名称
  • 有严格的作用域 const:声明一个只读的常量,一旦声明,常量的值不能改变,一定要在声明的时候赋值
  • 不存在变量提升
  • 同一个作用域下不能重复定义同一个名称 常量基本数据类型,存在栈里面的不可以改变,数组、对象等的数据存在堆中,只要存在栈中的地址不改变,堆中数据可以改变 不存在变量提升
var a = 'hello word'
let b = 'hi'

console.log(c) // undefined  c被预解析,但未被赋值
console.log(d) // 报错  let不存在变量提升
var c = 1000
let d = 1

同一个作用域下不能重复定义同一个名称

var a = 1
var a = 100
console.log(a) // 100

let b = 2
let b = 200
console.log(b) // 报错 'b'已被定义

let c = 3
    c = 300 // c是赋值,不是定义
console.log(c) /// 300

const d = 100
      d = 106
console.log(d) // 报错

const e; // 报错

const obj = {} 
obj.name = "mm"
console.log(obj) // {name:mm}

有严格的作用域

// 函数作用域,容易污染
function fun(){
var n = 10
 if(true){
  var n = 100
 }
 console.log(n)
}
fun() // 100
// 块级作用域
function fun(){
let n = 10
 if(true){
  let n = 100
 }
 console.log(n)
}
fun() // 10

2.箭头函数

简化了函数的定义

let f = v => v;
// 转换为ES5
var f = function(v)
{
   return v
}
// 函数体只有一行,可以省略{},只有一个参数,可以不加()
let f1 = () => 123

3. set map 添加的两种数据结构

set 类似于数组,成员是唯一的

map 类似于对象

const s = new Set()
s.add(1);
s.add(2);
// 可以写成 s.add(1).add(2)
const a = new Set()
a.add(1).add(2).add(3).add(2)
console.log(a) // 1,2,3
// 数组去重
var arr = [1,3,4,2,1,2,2]
var s = new Set()
arr.forEach(element => {
    s.add(element)
});
console.log([...s])
// 2
var arr = [1,3,4,2,1,2,2]
var s = [...new Set(arr)]
console.log(s)

// map添加对象
const m = new Map();
m.set('name','mm').set('age',19)
for(let [key,value] of m){

}