diff --git a/packages/babel-traverse/src/path/evaluation.ts b/packages/babel-traverse/src/path/evaluation.ts index 87e93655034b..6b35af8e6903 100644 --- a/packages/babel-traverse/src/path/evaluation.ts +++ b/packages/babel-traverse/src/path/evaluation.ts @@ -172,11 +172,11 @@ function _evaluate(path: NodePath, state: State): any { const type = typeof value; let key = null; - if (property.isIdentifier()) { - key = property.node.name; - } else if (path.node.computed) { + if (path.node.computed) { key = evaluateCached(property, state); if (!state.confident) return; + } else if (property.isIdentifier()) { + key = property.node.name; } if ( (type === "number" || type === "string") && diff --git a/packages/babel-traverse/test/evaluation.js b/packages/babel-traverse/test/evaluation.js index bd21be347521..07897748e71c 100644 --- a/packages/babel-traverse/test/evaluation.js +++ b/packages/babel-traverse/test/evaluation.js @@ -119,6 +119,11 @@ describe("evaluation", function () { .get("body.0.declarations.0.init") .evaluate().value, ).toBe("w"); + expect( + getPath("var length = 1; var x = 'abc'[length];") + .get("body.1.declarations.0.init") + .evaluate().value, + ).toBe("b"); const member_expr = getPath( "var x = Math.min(2,Math.max(3,4));var y = Math.random();", );