javascript中使字符串当做js代码来执行

JavaScript的起源?不同的JavaScript和引擎?JS版本发展史? 1995年,JavaScript诞生了。不得不提到它的标准ECMAScript, 它是一个语言标准,而非具体的语言。JavaScript除了名字有”Java”, 其它和Java没任何关系。Netscape为推广自家的LiveScript,命名中包含当时最流行的编程语言Java来蹭蹭热度。Netscape公司有些人可能不熟悉, 它就是早期被IE做浏览器对抗后来逐渐消亡一家公司。 阅读详情

在javascript中有多种方法可以让一段字符串当做一段js代码来执行:

  1. 使用eval("要执行的字符串")
  2. 使用new Function("要执行的字符串")
  3. setTimeOut("要执行的字符串",500)
  4. setInterval("要执行的字符串",500)

 

当然根据javascript最佳实践,我们是不推荐上面的任何一种方式的,当然eval()在处理JSON串时还是必须使用的,但是最佳实践禁止使用new Function构造函数来创建函数,而且禁止给setTimeout()和setInterval()方法传递字符串,应该传递函数名。

 

一、eval和new Function()的区别:

console.log("执行Function");

var val = new Function("console.log('houquan')");

console.log(typeof val);

console.log(val);

val();//如果不调用,那么就永远也不会输出“houquan”

 

/**

  通过new Function("...")执行返回的结果是一个名为anonymous的函数,函数体就是传到new Function()中的字符串。

anonymous的中卫意思是:匿名的

*/

val = new Function("(function(){console.log('test');})()");

console.log(typeof val);

console.log(val);

val();

 

new Function("alert('test1')");

eval("alert('test2')");

/**

  new Function()和eval()的区别是,前者把传入的字符串封装为一个function对象

  的语句返回,直到调用这个返回的函数时,才会执行字符串所要执行的操作;后者则是

  直接把字符串当做js代码执行,返回的结果是一个Object对象。

*/

 

console.log("执行eval");

val = eval("console.log('houding')");

console.log(typeof val);

console.log(val);

/**

  eval的执行结果在FireFox下是一个对象,在IE8中不返回结果

    该对象在FireFox中的结构如下:

*/

 

执行结果:

 

FireFox下的执行结果

 

IE8下的执行结果:

 

 

 

二、使用eval的注意事项:

console.log("第一个执行");

try{

  eval("function(){console.log('error');}");

}catch(e){

  console.log("error1");

  console.log(e.toString());

}

/**上面代码执行的结果就类似于在全局作用域中定义一个匿名函数是一个道理,

  果断报错,这就相当于给全局对象window,添加一个匿名的属性,或者方法一

  样,显然是无法做到的!

*/

console.log("第二个执行");

try{

  eval("(function(){console.log('right')})()");

}catch(e){

  console.log("error2");

  console.log(e.toString());

}

/**

  上面的代码就相当于执行一个即时函数一样

*/

console.log("第三个执行");

try{

  eval("function test(){console.log('test');}");

  test();

}catch(e){

  console.log("error3");

  console.log(e.toString());

}

 

/**

  上面的代码相当于定义一个函数

*/

 

执行结果:

 

eval 执行创建对象字面量注意事项

 

console.log("错误的创建对象字面量的情况");

try{

  eval("{name:'houquan'}");

}catch(e){

  console.log("error");

  console.log(e.toString());

}

 

/**

  上面的代码等同于下面的代码

*/

name:"houquan";

 

console.log("正确的创建对象字面量的情况");

try{

  eval("({name:'houquna'})");

}catch(e){

  console.log("error0");

  console.log(e.toString());

}

 

/**

  上面第一段代码中javascript引擎把{}中档次代码块来执行,所以不会返回

  预期的对象

  应该把对象字面量的创建语句用()括起来,当成一个表达式来执行,这样

  就能得到正确的结果了。

*/

 

执行结果:

 

单独执行

try{

  eval("{name:'houquan'}");

}catch(e){

  console.log("error");

  console.log(e.toString());

}

 

执行结果:

 

将字符串转换为JavaScript对象(Node.js编程) 在Node.js中,我们经常需要将字符串转换为JavaScript对象。本文将介绍如何在Node.js中将字符串转换为JavaScript对象,并提供相应的源代码示例。JavaScript中的对象是一种键值对的集合,其中每个键都是唯一的,对应一个值。记住,在转换字符串之后,您可以像访问任何其他JavaScript对象一样访问其属性。一旦我们将字符串转换为JavaScript对象,我们可以像访问任何其他JavaScript对象一样访问其属性。现在,让我们看一下如何将字符串转换为JavaScript对象。 阅读详情

相关推荐

Node.js环境下的JavaScript代码执行指南

Node.js是基于Chrome V8引擎的JavaScript运行环境,它使得JavaScript能够运行在服务器端。作为后端技术,Node.js提供了丰富的API,用于构建高性能、可伸缩的网络应用。Node.js以其事件驱动和非阻塞I/O模型在Web应用开发领域内得到了广泛的应用。Node.js的流行主要得益于其强大的生态系统和社区支持。其核心库由简单实用的模块组成,通过npm(Node Package Manager)可轻松扩展。

weixin_35794316的博客 1283

把字符串当做javascript代码执行

字符串还能当做javascript代码来执行?你能想到哪些方法? 1、setInterval("要执行的字符串",500);window对象的方法既可以传字符串,也可以传函数。该函数第一个参数传字符串容易引起内存泄漏,尽量避免这样写。2、setTimeOut("要执行的字符串",500);window对象的方法既可以传字符串,也可以传函数。该函数第一个参数传字符串容易引起内存泄漏,尽量避免这样写...

weixin_30414635的博客 1254

STM32 HAL库ADC+DMA配置详解:从CubeMX到实战调试

在嵌入式系统开发中,模数转换器(ADC)是实现传感器数据采集、信号处理等功能的基石。其工作原理是将连续的模拟信号转换为离散的数字量,为微控制器(MCU)提供可处理的数字信息。为了提升系统效率,直接存储器访问(DMA)技术被引入,它作为独立于CPU的数据搬运工,能在不占用CPU资源的情况下,自动完成外设与内存间的数据传输,从而解放CPU以执行更复杂的控制算法或通信任务。这种ADC与DMA的协同工作模式,对于实现高效、实时的数据流处理具有重要价值,广泛应用于电机控制、环境监测、音频处理等场景。本文聚焦于STM3

weixin_30698297的博客 407

JavaScript运行字符串的js代码

运行js字符串代码的三种方法

3570

LaTeX新手入门以及TeXlive和TeXstudio的安装使用

作为一个新手,LaTeX的了解和使用很是费了一番功夫,因此,在这里给找不到路的同志们稍微介绍一下。如有错误,敬请指正。本篇内容基于Win10系统,因此安装在Mac或者Linux上的同学可以再找找其他的介绍文章。 目录 LaTeX介绍 LaTeX环境配置 一、TeXlive下载 二、TeXlive安装 1. 安装main installer 2. 正式安装 三、TeXstudio安装...

zywhehe的博客 21万+

实验手册(灾难恢复)

我们发现DC1与DC2的复制出现问题,此时我们检查了在DC2中,DC1是否被正确注册。这里选择还原系统状态,因为我们原DC1上只备份了AD的数据,所以我们在新的这台服务器上还原的也是AD数据库。因为我们是单域下的测试,只测试了一个域,所以它会出现这样的报错。我们选择远程共享文件夹,我们备份的时候,是在备份这台服务器上的。同时删除SRV记录,A记录,NS记录,SOA记录,框框里面的所有有关dc1的记录全部删除。如果在企业中AD数据的备份是每周或者每月都会有一次备份,选择恢复AD数据库的时间。

weixin_52364868的博客 1309

js执行字符串代码

这种方式就不用但是上下文命名冲突的问题,因为代码是在函数中执行的,因此我们不需要在自调用函数中运行 new Function()。注:当前的a打印的是1,也就是Function 构造函数创建的函数仅在全局作用域中执行。注:需要注意的是,eval是在当前上下文执行的代码,如果字符串中的变量与当前上下文的变量命名冲突,就会导致报错。我们很难去避免字符串中的变量和当前上下文的变量重复,所以我们可以在自调用函数中执行eval来解决这个问题。这样就没问题了,注:这里的a打印的是2,也就是我们自调用函数作用域的a。

个人博客 1978

在Jetson orin板卡上部署ocr模型遇到错误

摘要:安装ONNX Runtime GPU版本时遇到问题,直接pip install onnxruntime-gpu会报错。解决方案是从test.pypi.org下载对应的.whl文件(如ort_nightly-1.14.0...aarch64.whl),本地安装后还需降级NumPy版本(如pip install numpy==1.26),以解决NumPy版本兼容性问题。整个过程涉及三个关键步骤:下载正确架构的wheel文件、本地安装、调整NumPy版本。

xdxd3c的博客 1526

js将字符串转化为代码

js将字符串转化为代码的几种方式: 1、直接将字符串转换为代码 var eacuateStr="alert(12);"; eval(eacuateStr); //执行alert(12); 弹出提示框 2、执行函数 function test(str){ alert(str); } eval('test("aaaaaaaaaaaaaaaaaaa")'); 3、将字符串作为动态参数执行 function test(data, a) { let result eval(a) return r

SmallGirlYang的博客 4738

汇川H5U PLC通过EtherCAT总线控制SV660N和X3E伺服

首先我们看下系统硬件和软件配置:汇川H5U PLC的编程软件是:AutoShop V4.6.3.0 硬件:PLC H5U-1614MTD-A16,汇川伺服型号:SV660NS1R6I 电机型号:MS1H1-10B30CB 100W 220V 3000R/M 0.32N*M 1.3A,禾川伺服驱动器型号:SV-X3EB075A-A2 伺服电机型号:SV-X2MH075A-N2LA。

RXXW_Dor的博客 2万+

Winform从入门到精通(1)——Label(史上最全)

本篇文章是对专栏《winform控件从入门到精通》的详细介绍

qq_34059233的博客 4万+

js怎么将字符串当做js执行代码?

先记录一下这个方法 转载自:https://www.cnblogs.com/fqh123/p/11302663.html 字符串还能当做javascript代码来执行?你能想到哪些方法? 1、setInterval(“要执行的字符串”,500); window对象的方法既可以传字符串,也可以传函数。该函数第一个参数传字符串容易引起内存泄漏,尽量避免这样写。 2、setTimeOut(“要执行的字符串”,500); window对象的方法既可以传字符串,也可以传函数。该函数第一个参数传字符串容易引起内存泄漏,

weixin_40981660的博客 3856

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

statistics+insight+vista+power 530

JavaScript eval()函数,将字符串当做代码来执行

demo.html: Title //eval函数可以用来将字符串转换成JavaScript代码并且运行 // var str = "var a = 10"; // eval(str); // console.log(a); //JSON格式的数据 JSON对象有兼容性问题 //

houyanhua1的专栏 5374

超大规模系统(千万级用户)中实现字段级权限控制

摘要:本文提出了一套分布式架构下的字段级权限优化方案,结合RBAC+ABAC混合模型与技术手段实现性能与安全的平衡。方案包括:1)权限模型优化,采用RBAC预计算基础权限与ABAC动态校验敏感字段;2)数据层优化,实现动态字段过滤与加密存储;3)多级缓存策略与预计算机制提升性能;4)分布式架构设计,通过网关校验和策略引擎集群保证扩展性。最终在千万级用户系统中实现99.9%可用性,权限校验延迟控制在50ms以内。

从技术实践立足,从项目管理方法论延伸思考 1348

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JS之JSON、eval函数:字符串当做一段JS代码解释并执行、parse函数、后端传字符串过来,如何转为JSON对象,前端如何展示后端传过来的数据

JS之JSON、eval函数:字符串当做一段JS代码解释并执行、后端传字符串过来,如何转为JSON对象,前端如何展示后端传过来的数据

蔡林浩的博客 511

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JavaScript中使用eval函数将一个String当成一句JS代码来执行

我们经常会碰到这样的情况: var tmp = "document." + form_name + ".env.value"; 其实这个tmp是个字符串,可能里面的值是document.SubmitJobForm.env.value,我们虽然是生成了这个字符串,但 是我们更需要的是执行这句代码,将这个env的value取出来。但是String是无法被执行的,此时,我们就需要eval这个函数: ...

weixin_30488313的博客 134

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python如何执行js代码,学会这两个库就够了

我们知道,python在做网络爬虫中的js逆向的时候,有时需要执行javascript代码,今天我来说一说这两个执行js代码的库的用法。

阿牛的博客 1万+

JavaScript 反混淆与 Python 执行JS

本文介绍了JavaScript反混淆的常用方法及Python执行JS代码的技术。反混淆技术包括代码美化、变量重命名、去除死代码、字符串解密、控制流平坦化反转等7种方法。Python执行JS代码主要通过两种方式实现:使用subprocess模块调用Node.js(推荐),或使用PyExecJS库自动寻找JavaScript运行时。文章详细说明了两种方法的安装步骤、代码示例和注意事项,为开发者处理混淆JS代码和跨语言调用提供了实用指南。

u013194310的博客 1094

深入了解JavaScript执行过程(JS系列之一)

前言 JavaScript 执行过程分为两个阶段,编译阶段和执行阶段。在编译阶段 JS 引擎主要做了三件事:词法分析、语法分析和代码生成;编译完成后 JS 引擎开始创建执行上下文(JavaScript 代码运行的环境),并执行 JS 代码。 编译阶段 对于常见编译型语言(例如:Java )来说,编译步骤分为:词法分析 -> 语法分析 -> 语义检查 -> 代码优化和字节码生成 ...

前端攻城狮 3520

JavaScript:全面解析各种浏览器网页中的JS代码的执行顺序

        近来我通过一些测试以全面的解析网页在各种浏览器中的JavaScript代码的执行顺序,在这儿做个记录。        我们知道javaScript是一种解释型语言,他的执行是自上而下,但是各个浏览器对于至上而下的理解是有细微差别的,而代码的上下游也就是程序流又对于程序正确至关重要,所以我觉得有必要深入理解多个js块儿的执行顺序。首先得知道有多少方法能把javaScript加入到

LENEL的砖篮 7499

JavaScript:从JS的执行机制到location对象

JavaScript语言的一大特点就是单线程,也就是同一时间只能做一件事。因为JavaScript是为了处理页面中的用户交互,以及制作DOM二诞生的。比如我们对某个DOM元素进行添加和删除操作,这个不能同时进行,应该先添加,后删除。这样也会有问题:如果JS执行时间过长,会造成页面渲染不连贯,导致页面渲染加载阻塞的感觉为了解决这个问题,利用多喝CPU的计算能力,HTML5提粗Web Worker标准,允许JavaScript脚本创建多个线程,于是就有了同步和异步。

2401_88226934的博客 1250

JavaScript逆向如何调用逆向出来的JS代码

在JavaScript逆向中,我们往往是将浏览器的JavaScript代码在本地还原,执行后获取逆向结果。然尔JavaScript逆向基本都是为Python爬虫服务的,所以我们经常需要在Python代码中调用JavaScript代码。本文详细介绍了几种常用的方法。

SamsongSSS的博客 1949

JS-01-在HTML中嵌入JavaScript代码的三种方式

JS-01-在HTML中嵌入JavaScript代码的三种方式 1.JavaScript概述 Web的组成有HTML、CSS还有即将要学习的JavaScript(简称JS)。 CSS和JS主要是服务于HTML,前者让HTML更加美观,后者能够让HTML动起来。 如果把HTML比作一只光秃秃的鸟的话,那么CSS就是鸟的羽毛,JS就是让鸟能够飞起来的肌肉。 2.在HTML中嵌入JavaScript代码的第一种方式 JS是一门事件驱动型的编程语言,依靠事件去驱动,然后执行对应的程序。 在JS中有很多事件,其中有

TSCCG的博客 2439
上一篇: docker 常用命令
下一篇: HTML DOM 元素对象 方法集合
IT有钱人
博客等级 码龄13年 269粉丝 68原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值