前言
看到 vue AST 抽象語法樹中有這樣的定義:

這時我嘗試在 F12 中輸出 document 看到了 nodeType 屬性和這個 child.type 相似。
個人認(rèn)為可能有所關(guān)系,不過不重要,因?yàn)檫@篇主要講 document 中的 nodeType 節(jié)點(diǎn)類型。
nodeType 的分類
我在 MDN 上搜索 nodeType ,看到如下表格:

通過 nodeType 來定義我們 document 上節(jié)點(diǎn)的節(jié)點(diǎn)類型,通過代碼,你講看到具體的輸出:
這是一段很簡單的 html 文件:




回過頭看 vue
為什么 vue 中的 type 屬性只出現(xiàn)了 2、3 (默認(rèn) 1)?
如果你熟悉其中的 parseHTML 方法,如下應(yīng)該就是其答案:

首先在對 html 解析時,會優(yōu)先對 注釋(COMMENT_NODE,CDATA_SECTION_NODE) 、文檔類型(DOCUMENT_NODE, DOCUMENT_TYPE_NODE) 進(jìn)行判斷;另外 vue 本身就是虛擬 Dom 機(jī)制,所以也就不需要 DOCUMENT_FRAGMENT_NODE 。
最后只要匹配 ELEMENT_NODE 和 TEXT_NODE 類型即可(值為 1,3)。
我們知道 innerHtml 會有 雙大括號 表達(dá)式,vue 就空出 2 專門用來對表達(dá)式解析。
總結(jié)
我只是看 vue 渲染代碼時,好奇為什么 type 是這樣的取值方式。也許是錯的,不過希望各位對 nodeType 這個 document 上的屬性有所認(rèn)識。