eval()可以将任意的字符串当做一个JavaScript代码来执行。

eval()使用实例:

    // 烦模式
var property = 'name';
console.log(eval('obj.'+property));
//推荐方法
var property = 'name';
console.log(obj[property]);

使用简单的方括号将需要访问的动态属性括起来

使用eval()包含一些安全隐患,因为可以动态的修改传入eval()内部的字符串,并执行。

2、牢记通过setInterval()、setTimeout、和function()等构造函数来传递参数

  //反模式
setTimeout('myfn()',3000);
setTimeout('myfn(1,2,6)',3000);
//推荐模式
setTimeout(myfn,3000);
setTimeout(function(){
myfn(1,2,6);
},3000)

使用new Function()构造函数和eval()比较类似,如果一定要使用eval(),可以使用new Function()来代替eval()。这样做的好处是new Function()中的代码将在局部函数空间中运行,可以避免生成全局变量,避免自动生成成为全局变量的方法是将eval()调用封装到一个即时函数中:

  console.log(typeof a);//未定义
console.log(typeof b);//未定义
console.log(typeof c);//未定义 var s1 = 'var a = 1;console.log(a);';
eval(s1);//
var s2 = 'var b = 2;console.log(b);';
new Function(s2)();//
var s3 = 'var c = 3;console.log(c);';
(function(){
eval(s3);
})();// console.log(typeof a);//number
console.log(typeof b);//undefined
console.log(typeof c);//undefined

所以用new Function()和(function(){eval('内容')})() 的作用是一样。

都是形成了内部函数,内部变量,如果单独使用eval()会产生全局变量

new Function 和 Function 是一样的

Function就像一个沙盒不能修改和访问它的作用域以外的变量,但是eval()可以

(function(){
var a = 23;
eval('a = 6;console.log(a);');//
console.log(a);//
})();
(function(){
var b = 56;
Function('console.log(b);')();//undefined
})();

避免使用eval()的更多相关文章

  1. JSON.parse 与 eval() 对于解析json的问题

    1.eval()与JSOn.parse的不同 eval() var c = 1; //全局变量 var jsonstr1 = '{"name":"a",&quo ...

  2. JSON.parse与eval的区别

    JSON.parse与eval和能将一个字符串解析成一个JSON对象,但还是有挺大区别. 测试代码 var A = "{ a: 1 , b : 'hello' }"; var B ...

  3. JS eval()函数的一些见解

    一.eval是基本使用规则 1 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 2 eval(string) 3 string必需.要计算的字符串,其中含有要计算的 ...

  4. Javascript动态执行JS(new Function与eval比较)

    new Function与eval可以动态执行JS,只要把拼接好的JS方法,然后以字符串的形式传入到这两个函数,可以执行,其中new Function用在模板引擎比较多. 用 Function 类直接 ...

  5. Python:eval的妙用和滥用

    时间 2014-07-08 13:05:24 CSDN博客 原文  http://blog.csdn.net/zhanh1218/article/details/37562167 主题 Python ...

  6. JSON中eval与parse的区别

    json的的解析方法 (非原创) json的解析方法共有两种:eval_r() 和 JSON.parse(),使用方法如下: var jsonData = '{"data1":&q ...

  7. eval解析JSON中的注意点

       在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery ...

  8. jQuery Ajax请求(关于火狐下SyntaxError: missing ] after element list ajax返回json,var json = eval("("+data+")"); 报错)

    $.ajax({    contentType: "application/x-www-form-urlencoded;charset=UTF-8" ,    type: &quo ...

  9. 被嫌弃的eval和with

    × 目录 [1]eval [2]with 前面的话 eval和with经常被嫌弃,好像它们的存在就是错误.在CSS中,表格被嫌弃,在网页中只是用表格来展示数据,而不是做布局,都可能被斥为不规范,矫枉过 ...

  10. Global eval. What are the options?

    David Flanagan最近写了一个关于全局eval的简单表达式,可以用一行式子表示: var geval = this.execScript || eval; 尽管看起来很简短,但是跨浏览器的兼 ...

随机推荐

  1. 8.16 val()和html()的问题

    今天在做关闭模态框重置表单时,关闭模态框后输入框里的值还是在,不知道怎么回事? 感谢wd啦,原来我在初始化这个输入框的时候就写错了,输入框写值的时候用的是val(),而我和上面的div一样,用的是ht ...

  2. fnb2b分支拉取注意事项

    1. 大B分支拉取以后不要忘记把index.php中dev环境改为 $save_url = "http://dev-b2b.dev1.fn/"; 2. 大B分支拉取后,记得/bas ...

  3. 24-算法训练 删除数组零元素-- list的使用

    http://lx.lanqiao.cn/problem.page?gpid=T201 算法训练 删除数组零元素   时间限制:1.0s   内存限制:512.0MB      从键盘读入n个整数放入 ...

  4. errror:[test_rig3.launch] is neither a launch file in package [svo_ros] nor is [svo_ros] a launch file name The traceback for the exception was written to the log file

    1. 打开一个终端,运行roscore 2. 打开另一个终端,运行 roslaunch svo_ros test_rig3.launch 出现errror: 忘记关键步骤了 $ cd <path ...

  5. 为什么使用Reazor

    原因:类似于前边写的模板页,自己写了.还需要用replace来替换成自己想要的变量.. 常见的模板引擎:Razor.Nvelocity.Vtemplate. Razor有VS自动提示,而且有助于学习a ...

  6. 统计sql

    查询统计信息 select * from user_tab_statistics t where t.TABLE_NAME=upper('tablename'); 查询表基本信息 select * f ...

  7. c#特性attribute:(二)

    日志 初始化 特性类里边构造函数里的属性,带参数不带参数的 ******特性是编译时是不加到il 中的,是加到metadata中 ,本身对程序运行没有影响,除非我们主动的读取和使用区供反射可以使用. ...

  8. BZOJ1123或洛谷3469 [POI2008]BLO-Blockade

    BZOJ原题链接 洛谷原题链接 若第\(i\)个点不是割点,那么只有这个点单独形成一个连通块,其它点依旧连通,则答案为\(2\times (n-1)\). 若第\(i\)个点是割点,那么去掉这个点相关 ...

  9. [SoapUI] Property Expansion in soapUI

    1. Property Expansion in soapUI SoapUI provides a common syntax to dynamically insert ("expand& ...

  10. 室内设计类网站Web原型制作分享——Dinzd

    Dinzd是一家德国室内设计网站,网站内涵盖全球设计精品资讯以及优秀案列.网站布局简单直观,内容丰富. 此原型模板所用到的交互动作有结合弹出面板做下拉菜单效果,鼠标按下文字按钮跳转页面,按钮hover ...