Browse Source

use charCodeAt instead of charAt when possible

Evan You 12 năm trước cách đây
mục cha
commit
f13558463b
4 tập tin đã thay đổi với 27 bổ sung24 xóa
  1. 3 3
      src/instance/scope.js
  2. 5 2
      src/observe/observer.js
  3. 18 18
      src/parse/directive.js
  4. 1 1
      src/parse/text.js

+ 3 - 3
src/instance/scope.js

@@ -93,7 +93,7 @@ exports._initData = function (data, init) {
     // delete keys not present in the new data
     for (key in scope) {
       if (
-        key.charAt(0) !== '$' &&
+        key.charCodeAt(0) !== 0x24 && // $
         scope.hasOwnProperty(key) &&
         !(key in data)
       ) {
@@ -269,8 +269,8 @@ exports._syncData = function () {
       if (locked) {
         return
       }
-      var c = key.charAt(0)
-      if (c === '$' || c === '_') {
+      var c = key.charCodeAt(0)
+      if (c === 0x24 || c === 0x5F) { // $ and _
         return
       }
       locked = true

+ 5 - 2
src/observe/observer.js

@@ -110,8 +110,11 @@ Observer.create = function (value, options) {
 p.walk = function (obj) {
   var key, val, descriptor, prefix
   for (key in obj) {
-    prefix = key.charAt(0)
-    if (prefix === '$' || prefix === '_') {
+    prefix = key.charCodeAt(0)
+    if (
+      prefix === 0x24 || // $
+      prefix === 0x5F    // _
+    ) {
       continue
     }
     descriptor = Object.getOwnPropertyDescriptor(obj, key)

+ 18 - 18
src/parse/directive.js

@@ -93,15 +93,15 @@ exports.parse = function (s) {
   arg = null
 
   for (i = 0, l = str.length; i < l; i++) {
-    c = str.charAt(i)
+    c = str.charCodeAt(i)
     if (inSingle) {
       // check single quote
-      if (c === "'") inSingle = !inSingle
+      if (c === 0x27) inSingle = !inSingle
     } else if (inDouble) {
       // check double quote
-      if (c === '"') inDouble = !inDouble
+      if (c === 0x22) inDouble = !inDouble
     } else if (
-      c === ',' &&
+      c === 0x2C && // comma
       !paren && !curly && !square
     ) {
       // reached the end of a directive
@@ -110,7 +110,7 @@ exports.parse = function (s) {
       dir = {}
       begin = argIndex = lastFilterIndex = i + 1
     } else if (
-      c === ':' &&
+      c === 0x3A && // colon
       !dir.expression &&
       !dir.arg
     ) {
@@ -121,16 +121,16 @@ exports.parse = function (s) {
       // an object literal or a ternary expression.
       if (argRE.test(arg)) {
         argIndex = i + 1
-        argC = arg.charAt(0)
+        argC = arg.charCodeAt(0)
         // strip quotes
-        dir.arg = argC === '"' || argC === "'"
+        dir.arg = argC === 0x22 || argC === 0x27
           ? arg.slice(1, -1)
           : arg
       }
     } else if (
-      c === '|' &&
-      str.charAt(i + 1) !== '|' &&
-      str.charAt(i - 1) !== '|'
+      c === 0x7C && // pipe
+      str.charCodeAt(i + 1) !== 0x7C &&
+      str.charCodeAt(i - 1) !== 0x7C
     ) {
       if (dir.expression === undefined) {
         // first filter, end of expression
@@ -142,14 +142,14 @@ exports.parse = function (s) {
       }
     } else {
       switch (c) {
-        case '"': inDouble = true; break
-        case "'": inSingle = true; break
-        case '(': paren++; break
-        case ')': paren--; break
-        case '[': square++; break
-        case ']': square--; break
-        case '{': curly++; break
-        case '}': curly--; break
+        case 0x22: inDouble = true; break // "
+        case 0x27: inSingle = true; break // '
+        case 0x28: paren++; break         // (
+        case 0x29: paren--; break         // )
+        case 0x5B: square++; break        // [
+        case 0x5D: square--; break        // ]
+        case 0x7B: curly++; break         // {
+        case 0x7D: curly--; break         // }
       }
     }
   }

+ 1 - 1
src/parse/text.js

@@ -80,7 +80,7 @@ exports.parse = function (text) {
       })
     }
     // tag token
-    oneTime = match[1].charAt(0) === '*'
+    oneTime = match[1].charCodeAt(0) === 0x2A // *
     value = oneTime
       ? match[1].slice(1)
       : match[1]