Fe-interview: [js] 第38天 说说你对eval的理解

Created on 23 May 2019  ·  12Comments  ·  Source: haizlin/fe-interview

第38天 说说你对eval的理解

js

Most helpful comment

  • 不安全的,
  • 容易出错, 因为你不知道你传入的参数是什么鬼
  • 性能底下.
  • 某种情况下跟new Function(), setTimeout, setInterval类似
  • 不利于代码可维护性, 可拓展性
  • 不是在无可奈何的情况下, 请不要使用

All 12 comments

  • 不安全的,
  • 容易出错, 因为你不知道你传入的参数是什么鬼
  • 性能底下.
  • 某种情况下跟new Function(), setTimeout, setInterval类似
  • 不利于代码可维护性, 可拓展性
  • 不是在无可奈何的情况下, 请不要使用

eval() 相当于一个小型的js解析器,接受一个字符串,可以把字符串解析成js代码并执行,所以有很有大的安全隐患,并且写进去的代码都是字符串,不利于维护,使用它执行代码性能也会大大折扣,所以正常情况下不建议使用。

eval 确实能不用就不用,不过在某些业务场景下,eval 比其他方法要简单很多,可以认为是一种hack,但是说到底还是不推荐使用

执行 js代码,有性能问题,又可以执行一些恶意代码。但是webpack中就用到了eval,所有一个东西用途还是需要看场景。

终极hack方法,从来不用

webpack中处理soucemap就用到了eval

eval 可以把字符串转为 javaScript 代码运行。一般提倡能不用就不用,由于是字符串,维护上会不易于维护,有很大的安全隐患并且运行效率上会较低。

但是在特殊的场景下,使用起来会非常方便。我自己在工具库中获取深度对象的值时使用过 evalconst value = eval('a.b.c')

var json = '{"a": "Hello", "b": "World"}';  //标准json字串
var json2 = '{a: "Hello", b: "World"}';  //非标准

注意:非标准的JSON字串转js对象时会报错,此时用eval()方法,它可以将标准与非标准的json进行转换。
var obj = eval("("+json2+")");

eval()接收一字符串,他会执行其中的JS代码
不安全,因为是将字符串解析成JS代码并执行
不利于,维护因为传的是字符串
性能低

webpack使用的就是eval执行的压缩之后的代码

eval() 相当于一个小型的js解析器,接受一个字符串,可以把字符串解析成js代码并执行,所以有很有大的安全隐患,并且写进去的代码都是字符串,不利于维护,使用它执行代码性能也会大大折扣,所以正常情况下不建议使用。

webpack中处理soucemap就用到了eval

eval-souce-map和这是同一个东西吗

Was this page helpful?
0 / 5 - 0 ratings