首页 > 编程语言 >[JavaScript]eval

[JavaScript]eval

时间:2023-02-06 17:01:29浏览次数:40  
标签:function return JavaScript var eval 字符串

eval()

eval() 函数会将传入的字符串当做 JavaScript 代码进行执行。

参数

string 一个表示 JavaScript 表达式、语句或一系列语句的字符串。表达式可以包含变量与已存在对象的属性。

返回值

返回字符串中代码的返回值。如果返回值为空,则返回 undefined。

说明

  • 如果字符串表示的是表达式,eval() 会对表达式进行求值。

  • 如果参数表示一个或多个 JavaScript 语句,那么eval() 就会执行这些语句。

  • 总之一句话,食之无味,弃之可惜

    示例一:

    eval(new String("2 + 2")); // 返回了包含"2 + 2"的字符串对象
    eval("2 + 2");             // returns 4
    

    示例二:

    var s = "console.log('RoastDuck');";
    eval(s);
    
  • 通常,可以对语句进行加密,之后直接丢给eval执行。

    eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('    3 2(){        4 6 = "0";        1.5(6);    }2()',62,7,'RoastDuck|console|fn|function|let|log|name'.split('|'),0,{}))
    

    执行结果:

    RoastDuck
    
  • eval 中函数作为字符串被定义需要用“()”

    var fctStr1 = 'function a() {}'
    var fctStr2 = '(function a() {})'
    var fct1 = eval(fctStr1)  // 返回 undefined
    var fct2 = eval(fctStr2)  // 返回一个函数
    

永远不要使用 eval!

eval() 是一个危险的函数,它使用与调用者相同的权限执行代码。如果你用 eval() 运行的字符串代码被恶意方(不怀好意的人)修改,您最终可能会在您的网页/扩展程序的权限下,在用户计算机上运行恶意代码。更重要的是,第三方代码可以看到某一个 eval() 被调用时的作用域,这也有可能导致一些不同方式的攻击。

标签:function,return,JavaScript,var,eval,字符串
From: https://www.cnblogs.com/Rev-RoastDuck/p/17095924.html

相关文章

  • 2331.evaluate-boolean-binary-tree 计算布尔二叉树的值
    问题描述2331.计算布尔二叉树的值解题思路递归代码classSolution{public:booldfs(TreeNode*root){if(root->left==nullptr){re......
  • [JavaScript]变量提升
    什么是变量提升?简单来说,就是JavaScript在执行程序时,会先把变量声明这一操作提前。换句话来说,就是不会在程序执行过程中声明变量。例子:functionfn(){console.log(nam......
  • 直播app开发搭建,纯javascript实现图片放大镜效果
    直播app开发搭建,纯javascript实现图片放大镜效果1、放大镜组成1)目标图片,一般是小图 2)鼠标移动上去的一个等比例小框框图 3)弹窗显示一个等比例的大图 2、实现分......
  • JavaScript实现拖动元素交换位置
     通过JavaScript实现拖动元素交换位置(如下图所示)实现方式HTML5提供了draggable属性,当它的值为true时,表示元素可拖动。在实现之前,首先我们需要明白两个单词的意思......
  • javascript之预编译
        Javascript按照<script>段的方式进行预编译处理相关的代码段,并且按照先预定义变量,再预定义函数的方式进行预编译!而且无论变量/函数在段中的任何地点进行显式......
  • javascript提交示例
    <td>@Html.ActionLink("编辑","Edit",new{id=1})<text>|</text>@Html.ActionLink("删除","Delete",new{id=2})<text>|</text><ahref="javascrip......
  • JavaScript中和动画相关的几个事件
    JavaScript中有以下几种与动画相关的事件:requestAnimationFrame这个事件可以在浏览器重绘之前触发,通常用于制作高性能动画。下面是一个使用requestAnimationFrame来制作简......
  • JavaScript 数组常用方法大全
    前言大家好,我是CoderBin,本次总结了JavaScript中关于数组的一些常用操作,想学习其他方法或者深入学习这些方法的可点击前往MDN-Array。希望对大家有所帮助,谢谢!如果文中有不......
  • [LeetCode] 2331. Evaluate Boolean Binary Tree
    Youaregiventhe root ofa fullbinarytree withthefollowingproperties:Leafnodes haveeitherthevalue 0 or 1,where 0 represents False and......
  • JavaScript 基础知识(四)
    前面已经介绍HTML和CSS,这两个是网页结构和样式,而负责控制网页行为的是javascript。浏览器上直接可以解释执行,而独立运行就需要nodejs集成运行环境。01-JavaScript的基......