我正在重建程序的 AST,我拥有的条件之一是在索引 N 处获取给定数组的元素。为了了解我应该如何构建它,我像往常一样去了AST Explorer并查看了该语句是如何构建的:
arr[0];
输出是:
{
"type": "MemberExpression",
"start": 0,
"end": 4,
"object": {
"type": "Identifier",
"start": 0,
"end": 1,
"name": "a"
},
"property": {
"type": "Literal",
"start": 2,
"end": 3,
"value": 0,
"raw": "0"
},
"computed": true,
"optional": false
}
由于在 Babel 中我们使用数字文字,numericLiteral
我尝试了这个:
memberExpression(identifier(<myArrayNameAsAString>), numericLiteral(0))
这令人惊讶地抛出了错误:
Error: Property property of MemberExpression expected node to be of a type ["Identifier","PrivateName"] but instead got "NumericLiteral"
现在我开始想知道 Babel 一开始是如何构建这样一个 AST 的。所以我给了这个表达式:
arr[0]
并得到了这个输出(来自 Babel):
MemberExpression: {
{
...,
type: 'Identifier',
name: 'arr'
},
{
...,
type: 'NumericLiteral',
value: 0
}
}
看起来 Babel 能够准确地构建我想要构建的东西,但是当我这样做时它会抛出一个错误。
作为替代方案,我研究了其他方法来实现这一点,例如使用.at。但是,该操作尚未被广泛采用,我想避免它。