https://github.com/rwson/parseobjectbystring
parseObjectByString
https://github.com/rwson/parseobjectbystring
Last synced: 5 months ago
JSON representation
parseObjectByString
- Host: GitHub
- URL: https://github.com/rwson/parseobjectbystring
- Owner: rwson
- Created: 2016-08-14T06:47:33.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2016-08-15T03:08:23.000Z (almost 10 years ago)
- Last Synced: 2025-03-11T03:41:52.831Z (over 1 year ago)
- Language: HTML
- Size: 903 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# parseObjectByString
根据相关字符串取得javascript对象中的属性并且计算出结果
在很多javascript的MVVM框架中,用的最多的就是指令,通过在html上指定指令对应的属性值为一个字符串时,完成数据的双向绑定
比如在angularjs(1.x)中的部分指令
ng-bind="text"
ng-repeat="item in array"
ng-hide="item.length == 0"
// ...等等
想想其中原理,个人觉得可以通过把字符串拆分成多块,然后尝试给该字符串前面加上"this."来修改其作用对象,最后把拆分并且经过处理的字符串组合在一起,通过
new Fucntion("return ...").call(obj);
来求得计算结果并返回
举个🌰:
// 定义一个对象,下面有这么些属性和值
var obj = {
"attrNum": 1,
"attrNum2": 3,
"attrBool": true,
"attrStr": "str",
"attrArr": [1, 2, 3],
"attrObj": {
"key": "val",
"key2": "val2"
}
};
// 然后定义一些如下的字符串
var str1 = "attrNum";
var str2 = "attrNum2";
var str3 = "attrNum + attrNum2";
var str4 = "attrNum2 == attrNum";
var str5 = "attrNum == attrNum2 ? 'true': 'false'";
var str6 = "attrNum2 != 2 ? true : false";
var str7 = "!attrBool";
var str8 = "attrStr != 'str'";
var str9 = "attrStr.length";
var str10 = "attrArr";
var str11 = "attrArr.length";
var str12 = "attrArr['length']";
var str13 = "attrArr.length == attrNum2";
var str14 = "attrArr['length'] != attrNum2";
var str15 = "attrObj.key";
var str16 = "attrObj['key2']";
var str17 = "attrObj['key2'] == attrObj.key";
var str18 = "attrNum + attrNum2";
var str19 = "attrNum + attrNum2 * 3";
var str20 = "(attrNum + attrNum2) * 3";
var str21 = "attrNum + attrNum2 > 3 ? 'true': 'false'";
var str22 = "(attrNum + attrArr['length']) < 3 ? true: false";
// 然后执行下面的for循环
for (var i = 1; i <= 25; i++) {
var variable = window["str" + i];
if(variable !== undefined) {
console.group("str" + i + "'s execute result:");
console.log("orignal expression is: " + window["str" + i]);
console.log(exec(window["str" + i], obj));
console.groupEnd();
}
}
进入浏览器控制台,将会看到下面的运行结果


