开发中切忌使用的JavaScript语句 —— with语句 和 eval语句

简介: 开发中切忌使用的JavaScript语句 —— with语句 和 eval语句

慎用的JavaScript语句之 with语句&eval语句

1、with语句

with语句 扩展一个语句的作用域链。

语法:

with (expression) {
    statement
}

参数:

expression:

将给定的表达式添加到在评估语句时使用的作用域链上。表达式周围的括号是必需的。

statement:

任何语句。要执行多个语句,请使用一个块语句 ({ … })对这些语句进行分组。

如下展示了with语句的使用:

// with 语句已经不推荐使用了
var message = 'Hello World';
var obj = { name: 'jam', age: 20 }
// 在with语句中打印age时,会输出obj对象中的age属性,但在with语句中打印不存在的属性message时,会向外层的作用域一层一层去查找
function foo () {
    with (obj) {
        console.log(age) // 20
        console.log(message) // Hello World
    }
    console.log(message) // Hello World
}
foo()

with语句可以形成自己的作用域


2、eval语句

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

语法

shell eval(string)

参数

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

返回值

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

示例代码

// eval是一个特殊的函数,它可以将传入的字符串当做JavaScript代码来运行
var message = "var name = 'jam';console.log(name)"
eval(message)

不建议在开发中使用eval


eval代码的可读性非常差(代码的可读性是高质量代码的重要原则);

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

eval的执行必须经过JS解释器,不能被JS引擎优化;

写这篇文章纯属避雷, 上述两个语句开发过程中切勿使用!!!


写这篇文章纯属避雷, 上述两个语句开发过程中切勿使用!!!


写这篇文章纯属避雷, 上述两个语句开发过程中切勿使用!!!


目录
相关文章
|
移动开发 JavaScript 前端开发
原生JavaScript+CSS实现计算器(简单的介绍一下eval函数)
原生JavaScript+CSS实现计算器(简单的介绍一下eval函数)
276 0
|
JSON JavaScript 小程序
js中eval()的使用说明
js中eval()的使用说明
424 0
|
JSON JavaScript Go
js中eval
js中eval
233 0
|
自然语言处理 JavaScript 前端开发
JavaScript中eval和with语句如何影响作用域链:探索深度知识
JavaScript中eval和with语句如何影响作用域链:探索深度知识
251 0
|
JavaScript
JS eval() 动态执行函数
JS eval() 动态执行函数
273 0
|
JavaScript 前端开发
JavaScript的break和continue语句的使用和区别
JavaScript的break和continue语句的使用和区别 JavaScript中break 和 continue都是用来控制循环结构,即用在for循环和while循环中。区别在于: break 语句用于跳出循环。 continue 用于跳过循环中的一个迭代。 1.break语句 break语句会终止循环并且跳出循环 for(var j=0;j<5;j++){ if(j==3){ break; } console.log(j);//0 1 2 }
|
JavaScript 前端开发
JavaScript的流程控制之if条件语句和switch选择语句(一)
JavaScript的流程控制(一) 接下来我么来讲一下JavaScript的流程控制,JavaScript中的流程控制主要包括条件语句和循环语句。这篇博客主要讲条件语句。说到条件语句主要包括if条件语句和switch选择语句两种。 1.if语句 //语法: // if(判断的条件){ // 条件成立时的执行代码 // } //if语句当条件不成立时,不执行任何的代码 var oDate=new Date(); console.log(oDate.getDay()); if(oDate.getDay()==6){
|
JavaScript 前端开发 容器
前端(JavaScript)------运算符及分支语句、循环语句
先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。
210 0
|
JavaScript 前端开发
JavaScript入门之分支语句
引入 我们知道,当今世界丰富多彩的代码世界如果用语句来区分的话,不外乎三种: 顺序语句 分支语句 循环语句 正是这简简单单的三类控制语句,构成了花样繁多的程序世界。