Skip to content

[js] 第38天 说说你对eval的理解 #142

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第38天 说说你对eval的理解

Activity

wenyejie

wenyejie commented on May 24, 2019

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

AnsonZnl commented on May 24, 2019

@AnsonZnl
Contributor

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

tzjoke

tzjoke commented on May 28, 2019

@tzjoke

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

myprelude

myprelude commented on Jun 13, 2019

@myprelude

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

DarthVaderrr

DarthVaderrr commented on Jul 4, 2019

@DarthVaderrr

终极hack方法,从来不用

seho-dev

seho-dev commented on Sep 7, 2019

@seho-dev

webpack中处理soucemap就用到了eval

Konata9

Konata9 commented on Sep 17, 2019

@Konata9

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

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

zlqGitHub

zlqGitHub commented on Jan 28, 2020

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

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

blueRoach

blueRoach commented on Jul 9, 2020

@blueRoach

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

Alex-Li2018

Alex-Li2018 commented on Aug 11, 2020

@Alex-Li2018

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

smile-2008

smile-2008 commented on Oct 28, 2020

@smile-2008

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

jamsehua

jamsehua commented on Jan 10, 2021

@jamsehua

webpack中处理soucemap就用到了eval

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

xiaoqiangz

xiaoqiangz commented on Jun 1, 2022

@xiaoqiangz

eval是可以执行js代码的,但是也可以执行恶意代码,对性能也有影响,要视情况而用,一般正常情况不建议使用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @smile-2008@wenyejie@haizhilin2013@Konata9@xiaoqiangz

        Issue actions

          [js] 第38天 说说你对eval的理解 · Issue #142 · haizlin/fe-interview