复习
-
yi 对象的精确配置:
-
高级的知识点: 可以精确的配置对象的属性
-
configurable: 可重新配置
-
writable: 可写入新的值
-
enumerable: 可遍历 --
for...in
-
value: 值
-
get: 计算属性. 属性的值是函数, 使用时不需要() 就自动触发
-
set: 监听器. 属性变为函数, 接收赋值操作传入的值, 进行检测
-
满足: 存储 制作的用于存储数据的属性, 名字通常是
_???
-
不满足: 报错
-
-
-
保护对象方式
-
阻止增: preventExtensions
-
阻止增删: seal
-
阻止增删改: freeze
-
-
箭头函数: 更方便的匿名函数格式
-
语法糖:
-
形参只有一个, ()省略
-
函数体只有一行, 可以省略 return 和 {}
-
-
this指向:
-
没有this, 用上级作用域的this--原型链机制
-
-
-
模板字符串
-
ES6新增的字符串增强语法
-
优化了字符串拼接:
${}
-
支持换行: 主要应对 HTML的多行代码
-
-
数组高阶函数: 高阶-函数中使用了其他函数
-
every: 每一个都满足
-
some: 至少一个满足
-
filter: 把满足条件的过滤出来
-
map: 映射--把数组元素处理后的返回值, 组成新的数组
-
一、高阶函数forEach
关于遍历数组,现在至少有四种
传统方案 : for循环
for...in: 遍历对象类型的通用方案; 数组是一个特殊的对象
ES6: 提供了 for..of 专门为遍历数组而来,与for..in区别是它直接遍历值, 没有序号
ES6: 提供数组的高阶函数forEach,注意: 区别其他高阶函数, 其没有返回值, 仅仅是遍历
应用forEach的一个案例
二、reduce
传统方式
reduce方式
reduce: 数组元素合并,注意参数代表的意义
三、let与const
ES6之前, 声明变量只有 var 和 function,存在全局污染风险: 在脚本中直接声明会出现在 window 对象里;ES6中提供 let 和 const 关键词。
1. 声明的变量存储在 脚本作用域 (全新的作用域),脚本作用域必须用断点技巧查看。
2. let声明可变化的;const声明常量: 声明后不可变化-更安全,效率更高。
案例: 根据情况选择用什么声明?
大明的薪资 salary -- 预判后期可能变化;大明的妻子 wife -- 预期后续不变化
理论上的优先级: const > let 不用var
3. 关于声明提升(面试题.重点)
const和let都有声明提升,但是存在“暂存死区”的设定。首先,声明提升不是一个好的设计, 所以作者要做修改;但是,声明提升根深蒂固, 直接修改其源码影响范围过大;所以作者提供了报错, 必须先声明再使用,否则后台爆红。
let/const 变量, 在声明代码执行前, 称为 暂存死区 状态-- 暂时提升, 但是 死的状态, 不允许用. 只有在声明代码执行后才能用
四、块级
块级作用域: 用于代替闭包
闭包: 用匿名函数制造一个函数作用域, 在其中声明变量 给其他函数用
块级: 用 {} 配合 let/const 使用
ES6之前是使用闭包
有一些语法自带{}, 都可以形成块级, 来避免全局污染for if while switch 都是自带块级
误区: 函数{} 函数作用域
对象{}: 虽然有{} 但是没有写 let 的语法
五、展开语法:...
合并两个数组使用 “ ... ” 去掉数组的外层[ ]
应用场景,比如说在使用max函数时,它只接受 一个一个传入的数字做参数, 不接受数组,查找一个数组中的最大值,就用到展开语法。
同样的,对象也可以使用展开语法,但是遇到同名属性, 后写的会覆盖先写的。
六、解构
可选解构: 就要第一个 和 最后一个
当我们把数组中的元素存储在 a b c d 四个变量里,使用解构语法方便很多,不必每一个元素写一条代码。
灵活应用场景: 互换的变量的值,原来我们还需要定义另一个变量储存数据,但现在不需要了。但值得注意的是,声明变量后需要用分号将解构语法的代码隔开,防止打印输出前面赋给变量的值。
当我们需要把对象中的属性读取出来,解构出两个属性,还可以使用别名语法: 把解构出来的属性 换个名,格式---- “属性名:别名”。
在实战中: 请求的数据通常是 对象 掺杂数组的结构,同样可以解构出来。
数组也能解构
参数解构
js转 html+参数解构
七、参数默认值
ES6 函数增强语法: 参数默认值。当没有传递实参, 则采用形参的默认值;当传递实参, 则使用传入的值 代替默认值。
八、函数的剩余参数
剩余参数: 比 arguments 更加强大 和灵活
arguments: 接收并存储所有的实参
缺点1: 隐式, 有的程序员不知道arguments的存在
缺点2: 伪数组类型, 没有数组的相关方法
ES6新语法: 用 ...变量名 显式声明参数, 接收所有的实参
此...和 之前的展开符... 没有任何关系, 只是外观相同