Es6梗概一

Es6 梗概一

Let

**    –相当于是完美版的 var.**

声明的变量 不提升(不会像 var  一样)

1
2
3
4
console.log(a); // ReferenceError: a is not defined
let a = "apple";
console.log(b); //undefined
var b = "banana";

的作用域在 {花括号}  内部

同一块作用域不能重复声明

可以代替自执行的匿名函数

案例 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// es5之前 因为if和for都没有块级作用域的概念,所有在很多时候,都需要借助funtion的作用域
// es6之后 加入了let let是有 if和for的作用域。

/* ES5的var是没有块级作用域的(if/for) */
/* 因为没有作用区域 循环遍历的 变量(i) 都同一个变量(i)*/
//闭包(自执行函数)可以解决这个问题:因为函数(function)是有作用域的
--因为函数的参数是属于函数内部作用域的,被赋值一次就是自己作用域的东西了。
--外部随便改都不影响了。

var btns =document.getElementsByTagName('button');
for(var i=0;i<btns.length;i++){
(function(i){
btns[i].addEventListener('click',()=>{
console.log('第'+(i+1)+'被点击');
})
})(i)

}

/* ES6的let有块级作用域的(if/for) */
//用let声明就有块级作用域了 相当于有5个不同的i 在自己的作用域范围内,用的是自己的i

const btns = document.getElementsByTagName("button");
for(let i =0;i<btns.length;i++){
btns[i].addEventListener('click',()=>{
console.log(i+1);
})
}

const

常量,不会改变的值,用 const 声明   不可以重复赋值

//1.注意点一。一旦给 const 修饰符的标识符被赋值后,不能修改。

//2.注意点二,在使用 const 定义标识符,必须进行赋值。

//3,注意点三。常量的含义是指向的对象不能修改。但是可以改变对象内部的属性

1
2
3
4
5
6
7
const obj = {
name: "wa",
age: 18,
height: 29,
};
obj.name = "ke"; // √
obj = 23; // X
  1. 对象中 属性里保存的不是对象(字符串也是对象)。而是这个对象的内存地址
  2. 用 const 修饰 就相当于绑定了内存地址。但是绑定的内存地址下的子地址(子属性)可以改变
  3. 在开发中优先使用 const,只用需要改变某一个标识符的时候才使用 let
  4. 但可以用下标赋值,不能直接 =  赋值。 也不可以在声明前访问。

箭头函数

this的指向 : 作用域父级 this 的指向。指向父作用域

>向外层作用域中,一层一层的往外查找 this,直达找到有 this 定义的。其箭头函数的 this 指向。就是指向该 this。

没有 arguments 对象,但可使用,剩余运算符 (...rest) => void

例子<<

function fun(参数){ code }  ===  (参数) => { code }

–当只有一个参数时,圆括号是可选的:

(singleParam) => { statements }

singleParam => { statements }

–没有参数的函数应该写成一对圆括号。

() => { statements }

==当函数体只有一行代码时,  可以不用写 return。函数体本身就是返回值。

1
2
3
4
Arr.map(function (v) {
return v.name;
});
Arr.map((v) => v.name);

(map 方法不会改变原来的数组,但可用变量存放修改过的复制数组)

箭头函数后如果是对象 要包装在括号中,将其转换为表达式而不是块语句

1
Arr.map((v) => ({ name: "bzj" }));

====

es6 遍历方式

for (key in arr/object)

  • 可遍历数组,对象也可以。对象专用
  • 遍历对象 key 取的是每个对象的属性名[key]
  • 具体的键值还是   使用 object 名[key]  获取

for (key of arr)

(只能遍历数组不能遍历对象,数组专用)

  • 但可以使用 Object.keys(对象) 把对象转为一个由 key 组成的数组。
  • 再遍历这个数组就对了。具体的键值使用**原对象名[key]**获取

Map 和 Set 以及 iterable

Set

特点就是不重复,去重好帮手

var s = new Set(接受一个数组)

s.add(元素) 添加元素,重复无效

s.delete(元素) 删除元素

s.has(元素) 判断元素是否存在

return [ …new Set(arr) ] – 把 arr 变为一个不重复的数组

Map

Map 是一组键值对的结构,具有极快的查找速度。其 key 不只是 String 类型可以 number 甚至 Object

初始化 Map 需要一个二维数组,或者直接初始化一个空 Map。Map 具有以下方法:

var m = new Map(); // 空 Map

m.set(‘Adam’, 67); // 添加新的 key-value

m.has(‘Adam’); // 是否存在 key ‘Adam’: true

m.get(‘Adam’); // 67

m.delete(‘Adam’); // 删除 key ‘Adam’

m.get(‘Adam’); // undefined

1
2
3
4
5
var map = new Map([
[{ bzj: 22 }, 95],
[627, "把子君"],
["Tracy", 85],
]);


iterable

翻译过来就是可迭代的意思

遍历Array可以采用下标循环,遍历MapSet就无法使用下标。为了统一集合类型,ES6 标准引入了新的iterable类型,ArrayMapSet都属于iterable类型

具有iterable类型的集合可以通过新的for … of循环来遍历;

更好的方式是直接使用iterable内置的forEach方法。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!