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){
}