1. let 块级作用域 ---> 用来声明变量
- 值类型和引用类型都可以。 ---> 可以修改
- 可以防止变量提升。 ---> 先声明后使用
- 块级作用域。 ---> 一个大括号{}的内部就是块级作用域。
- for 循环使用 let 可以防止 i 泄露
【注】在用 for 循环绑定事件时用 let 声明 i ,不用藏值,就可以点击并打印出 i
2. const ---> 用来声明常量
- 值类型和引用类型都可以。---> 值类型不可以修改;引用类型的地址不能修改,值可以修改
- 可以防止变量提升 ---> 先声明后使用
- 块级作用域。 ---> 一个大括号{}的内部就是块级作用域。
3. eval()的用法
3.1 eval(str) ---> 把字符串解析成js代码(不安全,少用)。类似JSON.parse(str)
3.2 eval(str) ---> str里面加"use strict" 形成eval函数作用域
【注】4种作用域:
1. 全局作用域
2. 局部作用域
3. let和const的块级作用域
4. eval('use strict')形成的函数作用域
4. ES6增强 —— 字符串
4.1 字符串模板 `` ---> 支持字符串插值
4.2 includes() ---> 判断是否有指定的子字符串
- 参数:子字符串
- 返回值:找到了返回true,找不到返回false
4.3 startsWith() ---> 判断指定的子字符串是否在头部
- 参数:子字符串
- 返回值:在头部返回true,否则返回false
4.4 endsWith() ---> 判断指定的子字符串是否在末尾
- 参数:子字符串
- 返回值:在末尾返回true,否则返回false
4.5 repeat() ---> 重复字符串
- 参数:重复次数
- 返回值:重复的字符串
5. ES6增强 —— 数组
5.1 Array.from() ---> 将伪数组转换为真数组
5.2 Arra.of() ---> 将一组值转换为真数组
5.3 find() ---> 数组的高阶方法。找出第一个符合条件的数组成员。
- 参数:回调函数
- 返回值:返回第一个符合条件的元素,若都不符合条件,返回undefined
- 应用:用于dom的查找、删除操作
5.4 findIndex() ---> 数组的高阶方法。找出第一个符合条件的成员下标。
- 参数:回调函数
- 返回值:返回第一个符合条件的元素的下标,若都不符合条件,返回-1。
6. ES6增强 —— 函数
6.1 函数的默认参数
给函数的形参赋值
function fn(n=2){}; // 2就是函数的默认参数
6.2 箭头函数 ()=>{}
-
① 如果只有一个参数,可以省略小括号。
a => {return res;}- 特殊情况:如果只有一个参数,参数带有默认参数,必须要有小括号。
(a = 2) => {return res;}
- 特殊情况:如果只有一个参数,参数带有默认参数,必须要有小括号。
-
② 如果函数体只有return res;这一句话,可以省略return和{}。
(a,b) => res;- 特殊情况:如果函数体只有return res;这一句话,res是带有{}的对象,要用小括号包起来。(因为此时的{}会被认为是函数体的{})
(a,b) => ({name:'A'});
- 特殊情况:如果函数体只有return res;这一句话,res是带有{}的对象,要用小括号包起来。(因为此时的{}会被认为是函数体的{})
-
③ 箭头函数的
this指向上下文对象。 -
④ 箭头函数不能被new,因为箭头函数没有构造器。
-
⑤ 箭头函数没有原型方法。
6. ES6增强 —— 对象
6.1 对象的属性简写
let name = '刘德华' ;
let obj ={ name:name } ;
// 等价于
let obj = { name } ; // 键名和键值一样可以简写
6.2 对象的方法简写
let obj = {
run:function(){};
}
// 等价于
let obj = {
run(){}; // 可以省略 :function
}
// 等价于
let a = 'run';
let obj = {
[a](){};
}
6.3 对象的新增方法
① Object.is( , ) ---> 恒等于(es6新增)
console.log(Object.is(1,1)); // true
console.log(Object.is(1,"1")); // false
console.log(Object.is(+0,-0)); // false
console.log(Object.is(NaN,NaN)); // true
② Object.assign() ---> 合并,拷贝(es6新增)
- 作用:合并多个js对象。
- 参数:第一个参数为目标对象,后边的参数为源对象。
- 返回值:返回第一个参数
【Object.assign()注意点】
- 后面的源对象中有同名的属性/方法,后覆盖前。
- assign不合并不可枚举的属性
- 拷贝:
var objRepeat = Object.assign({}, obj);
③ Object.keys() ---> 获取对象的键(es6前就有的方法)
④ Object.values() ---> 获取对象的值(es6新增)
⑤ Object.entries() ---> 获取对象的键与值(es6新增)
7. ES6新增 —— 解构赋值和对称赋值
作用:将对象或者数组“拆包”至一系列变量中。
var obj = {name:'胡歌',age:20,sex:'男',child:{name:'胡小歌',age:2,sex:'男',}}
var {name:name999,age,sex,child:{name,age,sex}} = obj
console.log(name,age);//胡小歌 2
console.log(name999);//胡歌 name999是别名
8. ES6新增 —— 展开运算符...
8.1 应用1:数组和对象的拷贝
var arr1 = [...arr];
var obj1 = {...obj};
8.2 应用2:函数传参
function fn(a,b,c,d){
r arrNorepea return a+b+c+d;
}
fn(...arr);
8.3 应用3:数组去重
vat = [...new Set()];
9. ES6新增 —— ESM模块化
10. ES6新增 —— Map超对象
10.1 特点:键可以是任意类型
10.2 创建一个超对象:
var map = new Map();
10.3 Map的属性/方法;
-
①
get()获取 -
②
set()设置var arr = []; //键名为引用类型的时候,最好先设置一下,方便get到同一个地址 map.set(arr,[11,22,33]); -
③
delete()删除 -
④
has()判断是否存在 -
⑤
clear()清除 -
⑥
keys()键 -
⑦
values()值 -
⑧
entries()键和值 -
⑨
遍历forEach、for...of -
⑩
size返回成员总数
11. ES6新增 —— Set集合
11.1 特点:类似数组,成员唯一
11.2 创建一个Set集合:
var set = new Set();
11.3 Set的属性/方法;
- ①
size返回成员总数 - ②
add()添加 - ③
has()判断是否存在 - ④
delete()删除 - ⑤
clear()清除 - ⑥
keys()键 - ⑦
values()值 - ⑧
entries()键和值 - ⑨
遍历 forEach()
12. ES6新增 —— WeakSet集合
12.1 特点:成员只能是对象,成员唯一
12.2 创建一个WeakSet集合:
var weakSet = new WeakSet();
12.3 WeakSet的属性/方法;
- ①
add()添加 - ②
has()判断是否存在 - ③
delete()删除
13. ES6新增 —— Symbol 唯一标识符(值类型)
13.1 Symbol特点:
- 提供独一无二的值
- Symbol 值作为对象属性名时,不能用点运算符,要用中括号表示法
- Symbol 值作为对象属性名时,该属性不会出现在
for...in、for...of循环中
13.2 创建一个标识
let s1= Symbol(); ---> 创建Symbol不能使用new
13.3 Symbol的应用场景
- ① Symbol() 保证switch分支的唯一性
- ② Symble.for() 设置私有属性
- ③ Symbol.iterator 给对象手动添加迭代器
14. ES6新增 —— 类继承
CSS三大特性:① 层叠性;② 优先性;③ 继承性
继承:子类拥有父类的属性和方法