抽象語法樹(Abstract Syntax Tree,AST),或簡稱語法樹(Syntax tree),是源代碼語法結構的一種抽象表示。它以樹狀的形式表現編程語言的語法結構,樹上的每一個節點都表示源代碼中的一種結構。node
抽象語法樹在不少領域有普遍的應用,好比瀏覽器,智能編輯器,編譯器等。在JavaScript中,雖然咱們並不會經常與AST直接打交道,但卻也會常常的涉及到它。例如使用UglifyJS來壓縮代碼,bable對代碼進行轉換,ts類型檢查,語法高亮等,實際這背後就是在對JavaScript的抽象語法樹進行操做。express
介紹前,請先打開 astexplorer.net/ 這個網址,這是個在線代碼轉化成AST工具。 輸入簡單的一行代碼編程
var name = 'ast';
const names= ['zs', 'ls']
複製代碼
輸出結果爲數組
{
"type": "Program",
"body": [
{
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "name"
},
"init": {
"type": "Literal",
"value": "ast",
"raw": "'ast'"
}
}
],
"kind": "var"
},
{
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "names"
},
"init": {
"type": "ArrayExpression",
"elements": [
{
"type": "Literal",
"value": "zs",
"raw": "'zs'"
},
{
"type": "Literal",
"value": "ls",
"raw": "'ls'"
}
]
}
}
],
"kind": "const"
}
],
"sourceType": "module"
}
複製代碼
在輸入一個函數看看結果瀏覽器
function add(a,b){
return a+b;
}
複製代碼
輸出bash
{
"type": "Program",
"body": [
{
"type": "FunctionDeclaration",
"id": {
"type": "Identifier",
"name": "add"
},
"expression": false,
"generator": false,
"async": false,
"params": [
{
"type": "Identifier",
"name": "a"
},
{
"type": "Identifier",
"name": "b"
}
],
"body": {
"type": "BlockStatement",
"body": [
{
"type": "ReturnStatement",
"argument": {
"type": "BinaryExpression",
"left": {
"type": "Identifier",
"name": "a"
},
"operator": "+",
"right": {
"type": "Identifier",
"name": "b"
}
}
}
]
}
}
],
"sourceType": "module"
}
複製代碼
這個比上面多了些類型babel
本節主要對AST有個大概認識,下節主要講如何經過babel將代碼轉成AST在轉成js代碼。async