阅读列表
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
temp
beFoo()
.- If
temp
is an abrupt completion, returntemp
.- Set
temp
totemp.[[Value]]
.- Return
NormalCompletion(temp)
.
Let val
be ! Foo()
等价于:
- Let
val
beFoo()
.- Assert:
val
is not an abrupt completion.- Set
val
toval.[[Value]]
.
- 抽象操作(abstract operations)就是引擎的一些内部方法,外部不能调用。
- 规范中将键值对(key-value map)的数据结构称为 Record,其中的每一组键值对称为 field。
- 规范中大量使用 [[Notation]] 这种写法,表示对象内部内部属性/方法。
- 执行步骤里的每一条语句都会返回一个 Completion Record,表示运行结果。每个 Completion Record 有一个[[Type]]属性,[[Type]] 值是“normal”的 Completion Record 称为,normal completion,否则称为 abrupt completion。
- 抽象操作的简写:
最开始:
- Let
result
beAbstractOp()
.- If
result
is an abrupt completion, returnresult
.- Set
result
toresult.[[Value]]
.- return
result
.
使用 ReturnIfAbrupt(result)
改写:
- Let
result
beAbstractOp()
.ReturnIfAbrupt(result)
.- return
result
.
使用 ? AbstractOp()
进一步简写(? 表示可能会报错。可以把 ? xx
展开为 ReturnIfAbrupt(xx)
):
- Let
result
be? AbstractOp()
.- return
result
.
甚至连 result
都可以不需要:
return
? AbstractOp()
.
除了 ?
,ES 6 规格还使用另一个简写符号 !
。
- Let
result
be! AbstractOp()
.- return
result
.
上面流程的 !
,代表 AbstractOp()
不会报错,返回的一定是 normal completion。
展开后:
- let
result
beAbstractOp()
.- Assert:
result
not an abrupt completion.- Set
result
toresult.[[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 年的“非典”。
2、3 月 30日 15 时,西昌市泸山 发生森林火灾,目前已造成19人遇难,其中 18 名为打火队员,1 名为当地向导。截至 31 日零时,过火面积 1000 公顷左右,毁坏面积初步估算 80 公顷左右。 2、美国知名成人杂志《花花公子》(Playboy)18日 宣布,因为新冠肺炎疫情对内容制作及供应链造成冲击,在美国的纸本杂志将停刊,2020年春季号是最后一期。(正文完)
广告时间(长期有效)
我有一位好朋友开了一间猫舍,在此帮她宣传一下。现在猫舍里养的都是布偶猫。如果你也是个爱猫人士并且有需要的话,不妨扫一扫她的【闲鱼】二维码。不买也不要紧,看看也行。
(完)