(val)
| 9980 | // 两种情况分析1 如果数据是object.info.name的情况下 则返回是 {exp: "object.info",key: "name"} |
| 9981 | //如果数据是object[info][name]的情况下 则返回是 {exp: "object[info]",key: "name"} |
| 9982 | function parseModel(val) { |
| 9983 | // Fix https://github.com/vuejs/vue/pull/7730 |
| 9984 | // allow v-model="obj.val " (trailing whitespace) |
| 9985 | val = val.trim(); //值 |
| 9986 | len = val.length; //获取长度 |
| 9987 | //lastIndexOf 方法可返回一个指定的字符串值最后出现的位置 |
| 9988 | if ( |
| 9989 | val.indexOf('[') < 0 || //这个字符串没有出现过[ |
| 9990 | val.lastIndexOf(']') < len - 1 //这个字符串 没有出现过]这个符号 或者是出现位置不是在最后一位的时候 |
| 9991 | ) { |
| 9992 | index$1 = val.lastIndexOf('.'); //获取最后一位出现 . 的位置 |
| 9993 | if (index$1 > -1) { //说明有点. |
| 9994 | return { |
| 9995 | exp: val.slice(0, index$1), //丢弃最后一位 比如data.object.info.age获取data.object.info |
| 9996 | key: '"' + val.slice(index$1 + 1) + '"' //获取最后一位 age |
| 9997 | } |
| 9998 | } else { |
| 9999 | return { |
| 10000 | exp: val, //如果没有点 则只有一个值 |
| 10001 | key: null |
| 10002 | } |
| 10003 | } |
| 10004 | } |
| 10005 | |
| 10006 | str = val; |
| 10007 | index$1 = expressionPos = expressionEndPos = 0; |
| 10008 | // 索引和字符串长度比较 如果索引大于或者等于字符串的时候返回真 |
| 10009 | |
| 10010 | while (!eof()) { //循环获取字符串的编码 直到把字符编码循环完 |
| 10011 | //获取字符串的编码 |
| 10012 | chr = next(); |
| 10013 | /* istanbul ignore if */ |
| 10014 | |
| 10015 | if (isStringStart(chr)) { //如果是 " 或者 ' 的时候返回真 |
| 10016 | parseString(chr); //循环匹配一对''或者""符号 |
| 10017 | } else if (chr === 0x5B) { // 符号 [ |
| 10018 | //检测 匹配[] 一对这样的=括号 |
| 10019 | parseBracket(chr); |
| 10020 | } |
| 10021 | } |
| 10022 | |
| 10023 | return { |
| 10024 | exp: val.slice(0, expressionPos), |
| 10025 | key: val.slice(expressionPos + 1, expressionEndPos) |
| 10026 | } |
| 10027 | } |
| 10028 | |
| 10029 | //索引加加 获取字符串的编码 |
| 10030 | function next() { |
no test coverage detected