From 5412c5a39f91bf60c6ead685dc4ac7db3ec81c82 Mon Sep 17 00:00:00 2001 From: harttle Date: Sat, 29 Sep 2018 16:45:11 +0800 Subject: [PATCH] fixes #88 --- src/lexical.js | 2 +- src/scope.js | 2 +- test/unit/scope.js | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lexical.js b/src/lexical.js index 649576dee..59f67ee01 100644 --- a/src/lexical.js +++ b/src/lexical.js @@ -9,7 +9,7 @@ export const integer = /-?\d+/ export const number = /-?\d+\.?\d*|\.?\d+/ export const bool = /true|false/ -// peoperty access +// property access export const identifier = /[\w-]+[?]?/ export const subscript = new RegExp(`\\[(?:${quoted.source}|[\\w-\\.]+)\\]`) export const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`) diff --git a/src/scope.js b/src/scope.js index ee1dc6c38..561930f70 100644 --- a/src/scope.js +++ b/src/scope.js @@ -109,7 +109,7 @@ const Scope = { assert(j !== -1, `unbalanced []: ${str}`) name = str.slice(i + 1, j) if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1] - name = this.get(name) + name = String(this.get(name)) } push() i = j + 1 diff --git a/test/unit/scope.js b/test/unit/scope.js index dd8a36b85..dc9d2798e 100644 --- a/test/unit/scope.js +++ b/test/unit/scope.js @@ -8,6 +8,7 @@ describe('scope', function () { beforeEach(function () { ctx = { foo: 'zoo', + one: 1, bar: { zoo: 'coo', 'Mr.Smith': 'John', @@ -46,6 +47,14 @@ describe('scope', function () { expect(scope.propertyAccessSeq('foo[0].bar')) .to.deep.equal(['foo', '0', 'bar']) }) + it('should handle nested access 5', function () { + expect(scope.propertyAccessSeq('foo[one].bar')) + .to.deep.equal(['foo', '1', 'bar']) + }) + it('should handle nested access 6', function () { + expect(scope.propertyAccessSeq('foo[two].bar')) + .to.deep.equal(['foo', 'undefined', 'bar']) + }) }) describe('#get()', function () {