#javascript #abstract-syntax-tree
Вопрос:
Я должен a.x = b.y
быть узлом AST:
{ "type": "ExpressionStatement", "start": 122, "end": 131, "expression": { "type": "AssignmentExpression", "start": 122, "end": 131, "operator": "=", "left": { "type": "MemberExpression", "start": 122, "end": 125, "object": { "type": "Identifier", "start": 122, "end": 123, "name": "a" }, "property": { "type": "Identifier", "start": 124, "end": 125, "name": "x" }, "computed": false, "optional": false }, "right": { "type": "MemberExpression", "start": 128, "end": 131, "object": { "type": "Identifier", "start": 128, "end": 129, "name": "b" }, "property": { "type": "Identifier", "start": 130, "end": 131, "name": "y" }, "computed": false, "optional": false } } }
Что означает computed
«и optional
«? Каковы некоторые примеры?
Комментарии:
1. Вычислено означает , что свойство похоже
object[property]
на, в отличие отobject.property
, все еще не уверен, что является необязательным, хотя.
Ответ №1:
Вот как a.b[c.d[e].f].g
это выглядит:
{ "type": "Program", "body": [ { "type": "MemberExpression", "object": { "type": "MemberExpression", "object": { "type": "MemberExpression", "object": { "type": "Identifier", "start": 1, "end": 2, "name": "a" }, "property": { "type": "Identifier", "start": 3, "end": 4, "name": "b" }, "computed": false }, "property": { "type": "MemberExpression", "object": { "type": "MemberExpression", "object": { "type": "MemberExpression", "object": { "type": "Identifier", "start": 5, "end": 6, "name": "c" }, "property": { "type": "Identifier", "start": 7, "end": 8, "name": "d" }, "computed": false }, "property": { "type": "Identifier", "start": 9, "end": 10, "name": "e" }, "computed": true }, "property": { "type": "Identifier", "start": 12, "end": 13, "name": "f" }, "computed": false }, "computed": true }, "property": { "type": "Identifier", "start": 15, "end": 16, "name": "g" }, "computed": false } ] }
То computed
есть для object[property]
.