翼度科技»论坛 编程开发 JavaScript 查看内容

eval有时候也可以用,而且有奇效

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
eval,一个我曾经避之不及的函数,最近我对它产生了一点新的感触:eval有时候也可以用,有奇效。
一般在使用js进行开发时,是不建议使用eval这类函数的。在JavaScript中,eval可以计算传入的字符串,将其当作js代码来执行。因为它可执行js代码的特性,有可能被第三方利用,传入恶意js代码执行,因此这个函数存在安全风险。再加上eval执行的速度低于普通的js程序,因此在日常开发中,它的使用准则是“能不用就不用”、“代码中使用eval是很丑陋的一件事”。
但是这次在做拉线功能时,我“不得不”使用了它。
拉线由于数据量小,可以通过矢量渲染的方式渲染到地图上,但是通过geoserver获取的坐标数据和样式数据是分离的,且没有样式名能将二者关联起来。
样式数据里面规定每组筛选条件对应一组样式值(线段的颜色、宽度,面的颜色、透明度),以以下这段样式数据为例:
  1. {
  2.   "Description": {
  3.       "Title": "hidetitle"
  4.   },
  5.   "Filter": {
  6.       "And": {
  7.           "PropertyIsGreaterThanOrEqualTo": {
  8.               "PropertyName": "rsrp_rate",
  9.               "Literal": "0"
  10.           },
  11.           "Not": {
  12.               "PropertyIsNull": {
  13.                   "PropertyName": "eci"
  14.               }
  15.           },
  16.           "PropertyIsEqualTo": {
  17.               "PropertyName": "geo_type",
  18.               "Literal": "cell"
  19.           },
  20.           "PropertyIsLessThanOrEqualTo": {
  21.               "PropertyName": "rk",
  22.               "Literal": "3"
  23.           },
  24.           "PropertyIsLessThan": {
  25.               "PropertyName": "rsrp_rate",
  26.               "Literal": "0"
  27.           }
  28.       }
  29.   },
  30.   "PolygonSymbolizer": {
  31.       "Fill": {
  32.           "SvgParameter": [
  33.               "#f56e3f",
  34.               "0.15"
  35.           ]
  36.       },
  37.       "Stroke": {
  38.           "SvgParameter": [
  39.               "#f56e3f",
  40.               "4"
  41.           ]
  42.       }
  43.   },
  44.   "Name": "cell1-3 and rate 0-20"
  45. },
复制代码
它的涵义是:
当满足(rsrp_rate >= 0 && ect !== null && geo_type === 'cell' && rk = indexValue[/code]利用eval可以将传入的字符串当作js语句执行的特性,我就可以得到一个条件判断结果,代码相对而言也简洁很多,使用eval,反尔让代码变得优雅,大大提高了数据匹配的效率和代码的可维护性。
总之,这段开发经历,让我对eval有了新的认识。

来源:https://www.cnblogs.com/xsilence/p/17252805.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具