eval浅解
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
需要一个参数(string),切必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。
1、只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回
var code1='"a" + 2'; //表达式 (字符串)
var code2={a:2}; //语句 (对象)
alert(eval(code1)); //'a2'
alert(eval(code2)); //[object Object],返回原对象
alert(eval('("' + code2 + '")')); //[object Object] ,此处括号是将对象转化为表达式
2、间接调用eval 函数优于直接调用
eval 函数有一个秘密武器,它不仅仅是一个函数。大多数函数只能访问定义它们所在的作用域,而不能访问除此之外的作域。
然而,eval 函数具有访问调用它那时的整个作用域的能力。这是非常强大的能力。当编译器编写者首次设法优化JavaScript 时,他
们发现eval 函数很难高效地调用任何一个函数,因为一旦被调用的函数是eval函数,那么每个函数调用都需要确保在运行时整个作
用域对eval 函数是可访问的。
作为一种折中的解决方案,语言标准演化出了辨别两种不同的调用eval 函数的方法。函数调用涉及eval 标识符,被认为是一
种“直接”调用eval 函数的方式。
var x = "global" ;
function test(){
var x = "1ocal";
return eval ("x"); // direct eval
} test();//"local"
此时,直接调用eval函数,只具有调用局部作用域的权限。直接调用eval函数性能上的损耗是相当高的。
另一种是“间接”调用eval 函数的方式。
var x = "global" ;
function test(){
var x = "1ocal";
var f = eval;
return f ("x"); // direct eval
} test();//"global"
这样,就可以避免把内部细节暴露给一些未授信者。
除非有检查局部作用域的特别明确的需求,否则应当使用更不容易滥用、更廉价的间接调用eval函数的方式。
3、关于eval
1、容易被用错
2、eval不容易调试
3、关于安全性,我们经常听到eval是魔鬼,他会引起XSS攻击,实际上,如果我们对信息源有足够的把握时,eval并不会引起很大的安全问题。而且不光是eval,其他方式也可能引起安全问题。比如:
莫名其妙给你注入一个<script src="">标签,或者一段来历不明的JSON-P请求,再或者就是Ajax请求中的eval代码…所以,只要你的信息源不安全,你的代码就不安全。不单单是因为eval引起的。
4、效率问题是程序逻辑问题。对于一些有执行字符串代码需求的程序中,不用eval而用其他方式模拟反而会带来更大的开销。
eval浅解的更多相关文章
- 从最大似然到EM算法浅解
		从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ... 
- 面试-1-C#浅解
		面试-1 C#浅解众所周知c#是微软推出的一款完全没面向对象的编程语言,那么对象是什么?在现实生活中人们一提到对象首先想到的就是“情侣”!但是在我们的程序中对象是什么? 在程序中个能够区别于其他事 ... 
- GIS历史概述与WebGis应用开发技术浅解
		声明:本篇在李晓晖的<杂谈WebGIS>,补充更多的资料说明.基于地图二次开发一直断断续续在做,这里算是补充一下基本功把.其实对于前端,WebGis开发都是api,抄demo,改.GIS深 ... 
- List根据某字段去重,以及compareTo 浅解
		原文链接:https://blog.csdn.net/qq_35788725/article/details/82259013 Collections.sort可对集合进行排序 根据List里面某个字 ... 
- js中eval详解,用Js的eval解析JSON中的注意点
		先来说eval的用法,内容比较简单,熟悉的可以跳过eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要 ... 
- python的exec、eval详解
		exec exec语句用来执行储存在字符串或文件中的Python语句.例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句.下面是一个简单的例子. exec ' ... 
- Js中JSON.stringify()与JSON.parse()与eval()详解及使用案例
		JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ... 
- JVM中GC浅解:垃圾回收的了解
		1.为什么要有GC 没有GC的世界,我们需要手动进行内存管理,但是内存管理是纯技术活,又容易出错.但是我们写码的目的是为了解决业务问题,所以可以把这种纯技术活自动化,当然自动化也是有代价的. 2.垃圾 ... 
- Vuex state 状态浅解
		对于Vuex中的state里面的理解总是有些欠缺,机制似乎理解了.但是还有很多的不足,在这就先浅谈下自己的理解. vuex 机制中,定义了全局Store,在各个vue组件面的this.$store指向 ... 
随机推荐
- (转载) java:IO流学习小结
			今天刚刚看完Java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ... 
- 蓝桥杯比赛javaB组练习《饮料换购》
			题目如下: 饮料换购 乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账. 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么 ... 
- 【css】主要的块状元素(block element)和内联元素(inline element行内元素)
			内联元素:只在行内发生作用,设置宽高不起作用,不会影响文字内容,使其换行等.竖直方向和间距也不起作用 display可以强制转换行内元素和块状元素,还可以取消显示none 块元素(bloc ... 
- Fliptile 翻格子游戏[Usaco2007 Open]
			题目描述 Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. ... 
- win10*64+vs2015+opencv3.0工程模板配置
			参考网上的资料,自己再次整合一下,为新手提供个方便,也为自己备份. 一.下载安装opencv3.0 1.首先下载opencv3.0的包(windows版本的) 2.安装opencv,路径自己选好,自动 ... 
- AKOJ -- 1529 -- 寻找最大数
			1529: 寻找最大数 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 107 Solved: 53 上一题SubmitStatus标签打分编辑题目信 ... 
- 在django中集成ckeditor富文本
			目前用的比较多的富文本插件有百度的ueditor.ckeditor.kindeditor等,其中ueditor和kindeditor比较美观,ckeditor的皮肤较少.但是ueditor加载较慢,k ... 
- HDU 1176 免费馅饼:dp
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意: 横坐标范围为[0,10],你在第0秒站在坐标为5的地方. 在接下来的一段时间内,会有n个 ... 
- POJ 3254 Corn Fields:网格密铺类 状压dp
			题目链接:http://poj.org/problem?id=3254 题意: 给你一片n*m的耕地,你可以在上面种玉米.但是其中有一些地方是荒芜的,不能种植.并且种植玉米的地方不能相邻.问你在这片地 ... 
- 关于Genymotion无法启动虚拟设备的问题解决
			只针对于该问题的解决,只需要将该虚拟机的网络设为混杂模式即可. 具体原因,未知.,设置如下 
