{"id":20698832,"url":"https://github.com/rwson/parseobjectbystring","last_synced_at":"2026-03-07T08:35:43.134Z","repository":{"id":87105455,"uuid":"65653870","full_name":"rwson/parseObjectByString","owner":"rwson","description":"parseObjectByString","archived":false,"fork":false,"pushed_at":"2016-08-15T03:08:23.000Z","size":925,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-11T03:41:52.831Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rwson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-14T06:47:33.000Z","updated_at":"2016-08-15T03:10:15.000Z","dependencies_parsed_at":"2023-07-04T22:48:25.405Z","dependency_job_id":null,"html_url":"https://github.com/rwson/parseObjectByString","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rwson/parseObjectByString","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwson%2FparseObjectByString","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwson%2FparseObjectByString/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwson%2FparseObjectByString/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwson%2FparseObjectByString/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rwson","download_url":"https://codeload.github.com/rwson/parseObjectByString/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwson%2FparseObjectByString/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30209968,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T05:23:27.321Z","status":"ssl_error","status_checked_at":"2026-03-07T05:00:17.256Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T00:27:03.006Z","updated_at":"2026-03-07T08:35:43.116Z","avatar_url":"https://github.com/rwson.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# parseObjectByString\n\n根据相关字符串取得javascript对象中的属性并且计算出结果\n\n在很多javascript的MVVM框架中,用的最多的就是指令,通过在html上指定指令对应的属性值为一个字符串时,完成数据的双向绑定\n\n比如在angularjs(1.x)中的部分指令\n\n    ng-bind=\"text\"  \n    \n    ng-repeat=\"item in array\"\n    \n    ng-hide=\"item.length == 0\"\n    \n    //  ...等等\n\n想想其中原理,个人觉得可以通过把字符串拆分成多块,然后尝试给该字符串前面加上\"this.\"来修改其作用对象,最后把拆分并且经过处理的字符串组合在一起,通过\n\n    new Fucntion(\"return ...\").call(obj);\n    \n来求得计算结果并返回\n\n举个🌰：\n\n    //  定义一个对象,下面有这么些属性和值\n\n        var obj = {\n        \"attrNum\": 1,\n        \"attrNum2\": 3,\n        \"attrBool\": true,\n        \"attrStr\": \"str\",\n        \"attrArr\": [1, 2, 3],\n        \"attrObj\": {\n            \"key\": \"val\",\n            \"key2\": \"val2\"\n        }\n    };\n    \n    //  然后定义一些如下的字符串\n    \n    var str1 = \"attrNum\";\n    var str2 = \"attrNum2\";\n    var str3 = \"attrNum + attrNum2\";\n    var str4 = \"attrNum2 == attrNum\";\n    var str5 = \"attrNum == attrNum2 ? 'true': 'false'\";\n    var str6 = \"attrNum2 != 2 ? true : false\";\n\n    var str7 = \"!attrBool\";\n\n    var str8 = \"attrStr != 'str'\";\n    var str9 = \"attrStr.length\";\n\n    var str10 = \"attrArr\";\n    var str11 = \"attrArr.length\";\n    var str12 = \"attrArr['length']\";\n    var str13 = \"attrArr.length == attrNum2\";\n    var str14 = \"attrArr['length'] != attrNum2\";\n\n    var str15 = \"attrObj.key\";\n    var str16 = \"attrObj['key2']\";\n    var str17 = \"attrObj['key2'] == attrObj.key\";\n\n    var str18 = \"attrNum + attrNum2\";\n    var str19 = \"attrNum + attrNum2 * 3\";\n    var str20 = \"(attrNum + attrNum2) * 3\";\n    var str21 = \"attrNum + attrNum2 \u003e 3 ? 'true': 'false'\";\n    var str22 = \"(attrNum + attrArr['length']) \u003c 3 ? true: false\";\n    \n    //  然后执行下面的for循环\n    for (var i = 1; i \u003c= 25; i++) {\n    \tvar variable = window[\"str\" + i];\n    \tif(variable !== undefined) {\n\t        console.group(\"str\" + i + \"'s execute result:\");\n\t        console.log(\"orignal expression is: \" + window[\"str\" + i]);\n\t        console.log(exec(window[\"str\" + i], obj));\n\t        console.groupEnd();\n    \t}\n    }\n    \n进入浏览器控制台,将会看到下面的运行结果\n    \n![1-7](1.png)\n\n![8-14](2.png)\n\n![15-22](3.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwson%2Fparseobjectbystring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frwson%2Fparseobjectbystring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwson%2Fparseobjectbystring/lists"}