فهرست منبع

fix #626 Math not recognized as global in simple path

Evan You 11 سال پیش
والد
کامیت
3ea564b899
2فایلهای تغییر یافته به همراه18 افزوده شده و 1 حذف شده
  1. 2 1
      src/parsers/expression.js
  2. 16 0
      test/unit/specs/parsers/expression_spec.js

+ 2 - 1
src/parsers/expression.js

@@ -215,7 +215,8 @@ exports.parse = function (exp, needSet) {
   // we do a simple path check to optimize for them.
   // the check fails valid paths with unusal whitespaces,
   // but that's too rare and we don't care.
-  var res = pathTestRE.test(exp)
+  // also skip paths that start with global "Math"
+  var res = pathTestRE.test(exp) && exp.slice(0, 5) !== 'Math.'
     ? compilePathFns(exp)
     : compileExpFns(exp, needSet)
   expressionCache.put(exp, res)

+ 16 - 0
test/unit/specs/parsers/expression_spec.js

@@ -175,6 +175,22 @@ var testCases = [
     },
     expected: 8,
     paths: ['$a', 'b', 'c', 'e']
+  },
+  {
+    // Math global, simple path
+    exp: 'Math.PI',
+    scope: {},
+    expected: Math.PI,
+    paths: []
+  },
+  {
+    // Math global, exp
+    exp: 'Math.sin(a)',
+    scope: {
+      a: 1
+    },
+    expected: Math.sin(1),
+    paths: ['a']
   }
 ]