【转】js中eval() 方法的使用以及一些特殊的使用方式
1、eval方法只能在非严格模式中进行使用,在use strict中是不允许使用这个方法的。
2、eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。 需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值。如下:
var code1='"a" + 2'; //表达式
var code2='{a:2}'; //语句
alert(eval(code1)); //->'a2'
alert(eval(code2)); //->2
alert(eval('(' + code2 + ')')); //->[object Object]
当eval中的字符串内是对象时加上括号则可以将原对象原样返回,如果将code2={a:2,b:3}时直接eval(code2)时会报错,加上括号就会将code2原样返回。
3、eval直接在函数内部使用则返回的是局部变量
function te (){
eval('var a=1;')
}
te();
alert(a);//这样会报错,因为a是局部变量,只能在te方法内使用
4、有两种的处理方式可以使在函数内部使用的eval成为全局变量
(1)利用window.eval()使其成为全局的
function te (){
window.eval(‘var a=1’)
}
te();
a 变量也是全局的
(2) function te (){
var a=eval;
a(‘var b=1’);
}
te();
这种方式下变量b 也是全局的。
所以说在非严格的模式下,又多了一种方法将JSON字符串形式转换为对象的形式。就是利用var m=eval(‘(’+data+’)’),m是JSON对象。
其功能和JSON.parse()是相似的,但是当已经为通过JSON.parse()转换为对象后的JSON不能再调用该函数继续进行转换,
这样会报错,但是eval()方法不会当传入字符串是对象使继续使用上述的方式,然会返回原对象。
XJOI网上同步训练DAY2 T1
BZOJ 2661 连连看
HDU 4411 Arrest
BZOJ 2324 营救皮卡丘
BZOJ 1927 星际竞速
BZOJ 3550 Vacation
XJOI网上同步训练DAY1 T3
php 类的相互访问
ThinkPhp5.0_文件上传
- 最新文章
-
【python3两小时快速入门】入门笔记02:类库导入
【shell学习4》》】系统化整理大纲
【Zookeeper01】ubuntu下安装zookeeper单例以及集群
【Netty整理03-NIO】Java 实现 NIO demo
【Netty整理02-详细使用】Netty入门
【Netty整理01-快速入门】Netty简单使用Demo(已验证)
【win10家庭版】删除文件提示没有权限最简单的方式(已验证)
【mysql5.7】远程无法连接设置
PAT甲题题解-1096. Consecutive Factors(20)-(枚举)
PAT甲题题解-1095. Cars on Campus(30)-(map+树状数组,或者模拟)
- 热门文章
-
PAT题解-1118. Birds in Forest (25)-(并查集模板题)
PAT甲题题解-1117. Eddington Number(25)-(大么个大水题~)
甲题题解-1116. Come on! Let’s C (20)-(素数筛选法)
PAT甲题题解-1115. Counting Nodes in a BST (30)-(构建二分搜索树+dfs)
PAT甲题题解-1114. Family Property (25)-(并查集模板题)
PAT甲题题解-1112. Stucked Keyboard (20)-(map应用)
PAT甲题题解-1111. Online Map (30)-PAT甲级真题(模板题,两次Dijkstra,同时记下最短路径)
PAT甲题题解-1110. Complete Binary Tree (25)-(判断是否为完全二叉树)
SGU 194 Reactor Cooling
ACdream 1017 Fast Transportation