LanguageJavaScript
2020-04-05 20:40:30 6 举报
AI智能生成
JavaScript知识图
作者其他创作
大纲/内容
设计模式
1.倒序循环 删除
数组删除多个元素
Daily Note
临时死区(变量不在提升)
声明不绑定在Windows
for(在此隐藏单独的作用域){}
for in 与for循环不用
l循环中 let 与 const 不同
循环
在循环中作用域特殊处理
let const
模板字符串
this值取决于真实的作用域
没有 new super 原型等
不能当构造函数使用
没有arguments
箭头函数
作为non-method-fucntion
调用对象toSting方法
参数为对象
将字符串作为描述值
参数为字符串
即使参数相同 生成的值也不相等(a === a false)
使用Symbol.for 生成的值 是相等的
值通过 Symbol()函数生成 let a = Symbol('a' || {})
不能使用new 使用instance of报错
在for in Object.keys() for of 无效
只能通过 Object.getOwnPropertySymbols ()获取
使用Symbol.keyFor()获取使用Symbol.for()生成的实际key
可以作为对象的唯一key
示例
Symbol类型
数组
迭代器默认结构为 [].entries
Map结构
迭代器默认结构为 [].values
内置迭代器 keys与values 值相同
Set结构
字符串
类数组
Generator 对象
带有Symbol.iterator属性的数据结构
Set集合
Map
使用对象
Keys()
Values()
Entries()
迭代器种类
内置迭代器
迭代器(for of)
只是语法糖 大部分功能 都可以用ES5 完成
定义
class内部定义的方法,它是不可枚举的 与es5 不同
constructor方法可自定义返回
通过extends关键字实现继承
与ES5 的差异
实例属性必须显示的定义即(this.x = x) 非显示定义的都落在原型上
类本身就指向构造函数 且类型也是函数
都有set get 方法
与ES相同
解决this报错 可以使用bind(this) 箭头函数 和proxy 自定义this指向
this问题
ES5 的继承,实质是先创造子类的实例对象this,然后再将父类的方法添加到this上面(Parent.apply(this))。ES6 的继承机制完全不同,实质是先将父类实例对象的属性和方法,加到this上面(所以必须先调用super方法),然后再用子类的构造函数修改this。
继承
note
父类的静态方法可以被子类继承
如果静态方法包含this关键字,这个this指的是类,而不是实例
静态方法
必须在子类调用super() 调用父类的构造函数
super虽然代表了父类A的构造函数,但是返回的是子类B的实例,即super内部的this指的是B的实例,因此super()在这里相当于A.prototype.constructor.call(this)。
super()只能用在子类的构造函数之中
super作为对象时,在普通方法中,指向父类的原型对象 实例中的属性和方法是获取不到的
super
Class
new Set() 参数为带有iteration属性的数据类型
值
add
detele =>返回操作结果(true or false)
has=>返回操作结果(true or false)
clear
方法
keys()
values()
entries()
foreach()
遍历方法
Set数据结构
new WeakMap() 参数只接受对象作为键名
WeakMap
resovle 成功 rejecet 失败
new Promise().then().catch
基本用法
promise 函数内代码立刻执行
多个promise嵌套 状态取决最后一个promis
resolve 或reject 执行完毕 不代表promise 执行完毕
标配then().catch()
内部错误必须使用catch捕获 内部报错不阻断外部代码运行
在node 中 unhandledRejection专门用来捕获位处理的错误(即将废除)
基础用法
注意事项
包含异步操作
返回promise实例(非new的实例)
都可链式调用
通用属性
a 成功回调 b 失败回调
then后的链式调用参数使用上一步then的结果
then
catch都可以捕获到内部异常
可以在catch内部继续抛错 链式调用catch再捕获
详解
catch
无论promise是什么状态 都会执行
finally
all race resolve reject any try allsettled
其余方法
无法重用
调用栈信息断开
要接入外部变量
地狱回调
解决的问题
Promise
只能在generator 函数中使用
在独立的表达式中 以(yield xx)
在表达式右侧 正常 yield xxx
yield
基本属性
控制函数向下执行
next(xx) 传递参数 覆盖上一步next表达式的值
next(xx)控制或修改 函数执行方式与顺序
next
return
throw
其他方法
Generator
遇到require开始加载,加载后再执行 延迟执行
依赖就近
Sea.js的定义规范
CMD
依赖前置
提前执行
require.js的定义规范
AMD
浏览器端的模块规范
同步 加载方式同cmd
Node定义规范
CommonJS
服务器规范
同AMD加载一样,先加载再执行
ES6定义规范
Import 导入的模块 只执行一次,即使应用中多次出现相同导入代码
import 声明与解构相似但实际不相同
const定义类似
单一文件中 只允许一个 export default
导出多个尽量使用 exprot 单个使用export default
ES6
导出的是值得拷贝,外部无法更改内部值,引用类型除外
导出对象只有运行时才能生成,
Common.js
导出值的引用
遇到import生成引用(在代码静态解析时就会生成),脚本运行时取值
Es6
差异
webpack提供方法内置参数加载
Babel编译为类似CommonJS规范的代码
ES6编译
浏览器环境中并没有 module、 exports、 require 等环境变量
为什么浏览器不支持commonJS
其他
模块加载
与Object.defineProperty 类似 单提供的方法多达15种
proxy 实例可以作为其他对的原型对象
在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写
get set
使用案例
revocable
详情
proxy
手册
使用手册
流程图
原型与原型链
作用域取决于调用上下文
bash 采用动态作用域
作用域取决于定义的上下文
JS 采用的是静态作用域(词法作用域)
作用域与作用域链
全局代码
局部(函数)代码
eval代码
可执行的代码
存储了在上下文中定义的变量和函数声明
活动对象 是函数执行时 才在其上下文中创建的变量
变量对象
全局对象是作用域链的最顶端
作用域链的形成在执行上下文时 创建完成
闭包 = 函数 + 函数能够访问的自由变量
指在函数中使用的,但既不是函数参数也不是函数的局部变量的变量。
自由变量
闭包
作用域链
base value
referenced name
strict reference
方法 Getbase isPropertyReference
Reference 地描述语言的底层行为逻辑才存在的
子主题
this
重要属性
给变量对象添加形参、函数声明、变量声明等初始的属性值
进入上下文 只会对上下文中已有的变量对象初始化 对全局或无关联的变量不会做初始化 如果再此上下文中 使用会报错
优先处理方法声明 若有同名变量 也无法更改方法声明 (使用var 声明的变量)
进入执行上下文
再次修改变量对象的属性值
执行代码
执行过程
执行上下文栈
基础类型传递的是值的copy
当直接修改参数时 是修改自身的引用不会影响真实引用的值
当修改引用副本的值时,会影响到 真实的引用值
共享传递 传递的是值引用的copy
引用类型
函数的参数都是按值传递
按值传递
Boolean() => false
Boolean
Number
String(NaN) => NaNString(Infinity) =>Infinity
String
null undefined 无toString()
toString
基本类型 调用tostring()
引用类型 使用valueof 再toString()
primitive
对象转字符串和数字
类型转换
深入理解
flex
CSS
自由主题
文档连接
JavaScript
0 条评论
回复 删除
下一页