阅读列表
1、理解 ECMAScript 规范
- v8.dev/blog/unders…
- 如何在规范中查找 obj.hasOwnProperty('foo') 这条语句的执行流程。涉及到的概念:abstract operations(? 和 ! 简写的含义)、language types、specification types、internal slots 还有 internal methods。
- 规范中使用的语言值(tc39.es/ecma262/#se…)并不等同于 JavaScript 中的。以布尔值 true、false 为例,如果 JS 引擎是使用 C++ 编写的,那么这里的 true、false 就是 C++ 里的 true、false,跟 JS 中的 true、false 内部表示是两个东西。
- v8.dev/blog/unders…
- 规范中原型链查找的内部执行流程
Return ? Foo() 展开后的步骤如下:
- Let
tempbeFoo().- If
tempis an abrupt completion, returntemp.- Set
temptotemp.[[Value]].- Return
NormalCompletion(temp).
Let val be ! Foo() 等价于:
- Let
valbeFoo().- Assert:
valis not an abrupt completion.- Set
valtoval.[[Value]].
- 抽象操作(abstract operations)就是引擎的一些内部方法,外部不能调用。
- 规范中将键值对(key-value map)的数据结构称为 Record,其中的每一组键值对称为 field。
- 规范中大量使用 [[Notation]] 这种写法,表示对象内部内部属性/方法。
- 执行步骤里的每一条语句都会返回一个 Completion Record,表示运行结果。每个 Completion Record 有一个[[Type]]属性,[[Type]] 值是“normal”的 Completion Record 称为,normal completion,否则称为 abrupt completion。
- 抽象操作的简写:
最开始:
- Let
resultbeAbstractOp().- If
resultis an abrupt completion, returnresult.- Set
resulttoresult.[[Value]].- return
result.
使用 ReturnIfAbrupt(result) 改写:
- Let
resultbeAbstractOp().ReturnIfAbrupt(result).- return
result.
使用 ? AbstractOp() 进一步简写(? 表示可能会报错。可以把 ? xx 展开为 ReturnIfAbrupt(xx)):
- Let
resultbe? AbstractOp().- return
result.
甚至连 result 都可以不需要:
return
? AbstractOp().
除了 ?,ES 6 规格还使用另一个简写符号 !。
- Let
resultbe! AbstractOp().- return
result.
上面流程的 !,代表 AbstractOp() 不会报错,返回的一定是 normal completion。
展开后:
- let
resultbeAbstractOp().- Assert:
resultnot an abrupt completion.- Set
resulttoresult.[[Value]].- return
result.
3、链判断运算符 & Nullish 合并运算符:ES2020 引入的两个运算符—— ?. 和 ??
- 链判断运算符
?.:如果运算符左侧对象为null或undefined,则不再往下计算,直接返回undefined。 - Nullish 合并运算符
??:行为类似||,但只有在运算符左侧的值为null或undefined时,才会返回右侧的值。
?. 的额外解释:
a?.b
// 等同于
a == null ? undefined : a.b
a == null只在a为null或undefined的情况下才成立。
?. 的用法如下:
obj?.prop// 对象属性obj?.[expr]// 同上func?.(...args)// 函数或对象方法的调用
?? 的额外解释:
a??b
// 等同于
a == null ? b : a
4、为什么每个前端开发者都要理解网页渲染?
浏览器渲染页面的步骤大致如:HTML 解析成 DOM,CSS 解析成 CSSOM -> DOM 和 CSSOM合并成 渲染树(不包含 head 标签和其他的 displa: none 元素) -> 布局:计算渲染树中的元素坐标 -> 绘制(显示布局)。
工具
1、Evernote Web Clipper:如何在 Chrome 浏览器中剪藏网页?
2、Nano ID:A tiny (108 bytes), secure, URL-friendly, unique string ID generator for JavaScript.

3、uid:A tiny (134B) and fast utility to generate random IDs of fixed length
4、await-to-js:Async await wrapper for easy error handling without try-catch
5、Papa Parse:The powerful, in-browser CSV parser for big boys and girls
资讯
1、2020 年 高考延期 一个月举行,考试时间为 7 月 7 日至 8 日。自 1977 年高考恢复以来,从未因故改期,包括 2003 年的“非典”。



(正文完)
广告时间(长期有效)
我有一位好朋友开了一间猫舍,在此帮她宣传一下。现在猫舍里养的都是布偶猫。如果你也是个爱猫人士并且有需要的话,不妨扫一扫她的【闲鱼】二维码。不买也不要紧,看看也行。
(完)