博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript基础避免使用eval()(006)
阅读量:6285 次
发布时间:2019-06-22

本文共 1431 字,大约阅读时间需要 4 分钟。

许多人认为eval()方法是邪恶(evil)的。这个方法可以把任意字符串当成Javascript代码来执行。我们应该尽可能的不用eval()方法。比如,可以使用方括号来得到对象属性的值:

// antipatternvar property = "name";alert(eval("obj." + property));// preferredvar property = "name";alert(obj[property]);

 另外,JavaScript的setInterval()和setTimeout()方法也有类似的问题。这时也应该避免把字符串当成参数传递给这些方法:

// antipatternssetTimeout("myFunc()", 1000);setTimeout("myFunc(1, 2, 3)", 1000);// preferredsetTimeout(myFunc, 1000);setTimeout(function () {    myFunc(1, 2, 3);}, 1000);

 new Function()作为函数的声名方式,也可以接受字符串作为参数,但这也是应该避免的。new Function()和eval()的区别是,eval()执行的代码中的变量将“变成”全局变量,但new Function()则不然。

console.log(typeof un);    // "undefined"console.log(typeof deux);  // "undefined"console.log(typeof trois); // "undefined"var jsstring = "var un = 1; console.log(un);";eval(jsstring); // logs "1"jsstring = "var deux = 2; console.log(deux);";new Function(jsstring)(); // logs "2"jsstring = "var trois = 3; console.log(trois);";(function () {    eval(jsstring);}()); // logs "3"console.log(typeof un);    // "number"console.log(typeof deux);  // "undefined"console.log(typeof trois); // "undefined"

 另外,eval()中的字符串代码可以访问程序中的全局变量,而new Function则不然。需要注意的是Function和new Function效果完全相同:

(function () {    var local = 1;    eval("local = 3; console.log(local)"); // logs 3    console.log(local); // logs 3}());(function () {    var local = 1;    Function("console.log(typeof local);")(); // logs undefined}());

 

转载于:https://www.cnblogs.com/Bryran/p/3969163.html

你可能感兴趣的文章
dotfuscator初步
查看>>
Ubuntu各个版本的介绍
查看>>
【leetcode】Pascal's Triangle I & II (middle)
查看>>
SQL Server
查看>>
GitHub详细教程
查看>>
【书评:Oracle查询优化改写】第三章
查看>>
Python 内置彩蛋
查看>>
SQLServer 之 常用函数及查看
查看>>
FrameWork中SQLServer数据源使用宏函数出错解决办法
查看>>
[.net 面向对象编程基础] (8) 基础中的基础——修饰符
查看>>
如何在plSql查询数据查出的数据可编辑
查看>>
2015年第11本:代码整洁之道Clean Code
查看>>
PHP 错误与异常 笔记与总结(11 )register_shutdown_function() 函数的使用
查看>>
talend 将hbase中数据导入到mysql中
查看>>
内置在虚拟机上64位操作系统:该主机支持 Intel VT-x,但 Intel VT-x 残
查看>>
Material Design练习
查看>>
[译] 二、开始iOS编程之前,你还需要做什么?
查看>>
java中注解的使用与实例(一)
查看>>
Alisha’s Party(队列)
查看>>
Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物...
查看>>