︶葆Ⅱㄣ

文章 评论 浏览 29

︶葆Ⅱㄣ 2022-05-04 13:57:15

where is dalao?

第 24 题:聊聊 Redux 和 Vuex 的设计思想

︶葆Ⅱㄣ 2022-05-04 13:23:48

涉及到的主要是AST相关的内容,AST(Abstract Syntax Tree)中文叫抽象语法树,是用来表示源代码语法的一种树形结构,树上的每个节点都代表源代码的一种结构。AST在我们日常应用中非常广泛,我们的代码高亮,代码检查等都是依靠的AST。

那么ES6转ES5的思路,其实就是在处理AST的过程中进行操作。转化代码的流程一般分为三步

  1. 将代码通过解释器转化为AST,可以通过 astexplorer 来查看代码对应的AST结构
  2. 通过一定的规则,去修改AST的结构(常见的比如转jsx,ES6转ES5都是在这一步进行操作)
  3. 将修改后的AST转化为普通代码

现在一般使用的就是bable转ES6,具体的ES6转ES5在第二步中的逻辑,那就得看bable中转ES6的babel-preset-es2015 对AST进行操作的源码了

第 66 题:ES6 代码转成 ES5 代码的实现思路是什么?

︶葆Ⅱㄣ 2022-05-04 11:22:55

第四章:Coercion

值的类型转换(Converting Values)

把值从一个类型转为另一个类型,通常称为类型转换("type casting"),可以是显式的,也可以是隐式的(由值怎么使用的规则强制)。

**注意:虽然不明显,但类型转换的结果总是生成基础类型的值。**包装不是严格意义的类型转换。

抽象值操作(Abstract Value Operations)

在分辨显式隐式转换前,首先了解控制转换的基本规则。ES5规范的第九章定义了一些抽象操作(也叫 "internal-only operation"),关于转换规则。我们关注ToString,ToNumber,ToBoolean, ToPrimitive4个。

ToString

非字符串转换成字符串,就由ToString处理。

内置基础类型有规定的转换规则:null-->"null"undefined-->"undefined"true-->"true"。数字就是像我们期待那样, 但很小或很大的数字是以指数形式。

对一般对象来说,除非你指定了你自己的,默认的toString()(位于Object.prototype.toString())会返回[[Class]](第三章),例如"[object Object]"

注意:对象转换为字符串需要经过ToPrimitive,这会在ToNumber段细讲,这里跳过。

JSON Stringification

JSON.stringify(..)看起来和ToString相关,但注意,这和类型转换不是一回事。

对大多数基础值来说,JSON.stringify(..)表现与ToString一致。

JSON-safe的值可以被JSON.stringify(..)。但什么是JSON-safe的?即可以被JSON有效表示的。不是JSON-safe的很容易列出:undefinedfunctionsymbol,有循环引用的object等。

JSON.stringify(..)会自动忽略这些不合法值,如果这些值在数组中,会被替换为null

如果你JSON.stringify(..)一个对象,这个对象有toJSON方法,toJSON会自动先调用(可以在此返回JSON-safe的值)。

ToNumber

Input TypeResult
Undefined

You-Dont-Know-JS 笔记之类型和语法

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文