首页 > 其他分享 >js eval()方法

js eval()方法

时间:2024-01-12 11:35:12浏览次数:21  
标签:console log 代码 js eval msg 方法 解码

与 encodeURI()和 encodeURIComponent()相对的是 decodeURI()和 decodeURIComponent()。 decodeURI()只对使用 encodeURI()编码过的字符解码。例如,%20 会被替换为空格,但%23 不会被 替换为井号(#),因为井号不是由 encodeURI()替换的。

类似地,decodeURIComponent()解码所有 被 encodeURIComponent()编码的字符,基本上就是解码所有特殊值。

let uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start";
// http%3A%2F%2Fwww.wrox.com%2Fillegal value.js%23start
console.log(decodeURI(uri));
// http:// www.wrox.com/illegal value.js#start
console.log(decodeURIComponent(uri));

uri 变量中包含一个使用 encodeURIComponent()编码过的字符串。首先输出的是使用 decodeURI()解码的结果,可以看到只用空格替换了%20。然后是使用 decodeURIComponent()解码的 结果,其中替换了所有特殊字符,并输出了没有包含任何转义的字符串。

最后一个方法可能是整个 ECMAScript 语言中最强大的了,它就是 eval()。这个方法就是一个完 整的 ECMAScript 解释器,它接收一个参数,即一个要执行的 ECMAScript(JavaScript)字符串。

eval("console.log('hi')");
上面这行代码的功能与下一行等价:
 console.log("hi");

当解释器发现 eval()调用时,会将参数解释为实际的 ECMAScript 语句,然后将其插入到该位置。 通过 eval()执行的代码属于该调用所在上下文,被执行的代码与该上下文拥有相同的作用域链。这意 味着定义在包含上下文中的变量可以在 eval()调用内部被引用,比如下面这个例子:

let msg = "hello world";
    eval("console.log(msg)");  // "hello world"

这里,变量 msg 是在 eval()调用的外部上下文中定义的,而 console.log()显示了文本"hello world"。这是因为第二行代码会被替换成一行真正的函数调用代码。类似地,可以在 eval()内部定义 一个函数或变量,然后在外部代码中引用,如下所示:

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

这里,函数 sayHi()是在 eval()内部定义的。因为该调用会被替换为真正的函数定义,所以才可 能在下一行代码中调用 sayHi()。对于变量也是一样的:

eval("let msg = 'hello world';");
    console.log(msg);  // Reference Error: msg is not defined

通过 eval()定义的任何变量和函数都不会被提升,这是因为在解析代码的时候,它们是被包含在 一个字符串中的。它们只是在 eval()执行的时候才会被创建。 在严格模式下,在 eval()内部创建的变量和函数无法被外部访问。换句话说,最后两个例子会报 错。同样,在严格模式下,赋值给 eval 也会导致错误:

"use strict";
eval = "hi"; // 导致错误

标签:console,log,代码,js,eval,msg,方法,解码
From: https://blog.51cto.com/u_16273048/9212758

相关文章

  • js Global 对象属性
    Global对象有很多属性,其中一些前面已经提到过了。像undefined、NaN和Infinity等特殊值都是Global对象的属性。此外,所有原生引用类型构造函数,比如Object和Function,也都是Global对象的属性。undefinedNaNInfinityObjectArrayFunctionBooleanString特殊值undefi......
  • js Math方法
    ECMAScript提供了Math对象作为保存数学公式、信息和计算的地方。Math对象提供了一些辅助计算的属性和方法。1.Math对象属性:Math对象有一些属性,主要用于保存数学中的一些特殊值。下表列出了这些属性。Math.EMath.LN10Math.LN2Math.LOG2EMath.LOG10EMath.PIMath.SQRT1_......
  • 无涯教程-JSON - Python编程
    本章介绍如何使用Python编程语言编码和解码JSON对象。让我们从准备环境开始,以使用Python进行JSON编程。在开始使用Python编码和解码JSON之前,您需要安装任何可用的JSON模块,在本教程中,我们已经下载并安装了Demjson,如下所示-$tarxvfzdemjson-1.6.tar.gz$cddemjson-1.6$pyt......
  • 无涯教程-JSON - Perl编程
    本章介绍如何使用Perl编程语言编码和解码JSON对象,让我们从准备环境开始,开始使用PerlforJSON进行编程。在使用Perl编码和解码JSON之前,需要安装JSON模块,该模块可以从CPAN获得。下载JSON-2.53.tar.gz或任何其他最新版本后,请按照以下步骤操作-$tarxvfzJSON-2.53.tar.gz$cdJSO......
  • 程序员必知!模板方法模式的实战应用与案例分析
    模板方法模式让子类在不改变算法整体结构的前提下定制特定步骤,例如咖啡制作,不同咖啡遵循相同流程但有独特定制,如拿铁加牛奶,美式不加,这确保了制作流程的一致性,同时满足了不同咖啡的个性化需求,体现了模板方法模式的核心思想。定义模板方法模式是一种行为设计模式,它在一个方法中......
  • 【设计模式】工厂方法模式——工厂方法模式在JDK源码中的应用
    工厂方法模式在JDK源码中有很多应用场景,不仅有简单工厂模式,还有多工厂模式。Executors尽管ThreadPoolExecutor及其子类都是可以直接new出来的,但Executors还是提供了生产常用ThreadPoolExecutor实例的简单工厂:publicclassExecutors{/***Createsathreadpoolthat......
  • Python对Excel表格文件数据按条件加以筛选并生成直方图的方法
      本文介绍基于Python语言,读取Excel表格文件数据,以其中某一列数据的值为标准,对于这一列数据处于指定范围的所有行,再用其他几列数据的数值,加以数据筛选与剔除;同时,对筛选前、后的数据分别绘制若干直方图,并将结果数据导出保存为一个新的Excel表格文件的方法。  首先,我们来明确一......
  • Powersehll交互式输入定义方法-03
    定义和使用交互式输入时,有一些注意事项需要考虑。以下是一些常见的注意事项:提示信息清晰:在提示用户输入时,确保提示信息清晰、明确,并提供必要的上下文说明,使用户知道预期的输入内容。输入验证和错误处理:对于用户输入的值,进行必要的验证和错误处理。确保输入符合预期的格式、类型或范......
  • Powershell运算符使用方法-04
    Powersehll使用运算符时,需要注意以下几个方面:数据类型:不同的运算符适用于不同的数据类型。确保进行运算的操作数具有适当的数据类型,以避免意外结果或错误。例如,算术运算符适用于数字类型,但不适用于字符串类型。空值处理:某些运算符对于空值(null)的处理方式可能不同。在比较运算中,空值......
  • 软件测试/测试开发全日制|Pyest结合json实现数据驱动测试
    前言数据驱动测试是提高代码覆盖率和可靠性的重要方法。结合pytest和JSON(JavaScript对象表示)文件可以轻松实现数据驱动测试。和CSV文件类似,Python读取json文件也不需要借助其他的第三方库,因此我们不需要进行额外的环境安装。下面是如何使用pytest和JSON文件进行数据驱动测试的步骤......