- 浏览: 1126142 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhizhen23:
LZ 提供的链接地址失效了
重写的isPlainObject方法 -
LovingBaby:
LovingBaby 写道function fun() {}f ...
读jq之二(两种扩展) -
LovingBaby:
说的很清楚!jQuery作者为了实现简洁调用的苦心!高超的编程 ...
读jq之一(jq对象的组成) -
hard_ly:
...
将伪数组转换成数组 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,例如二十六进制、十二进制又该如何 ...
用递归实现十进制数转换N进制
它们之间有区别吗?开发过程中似乎很少有人去加个额外的window,觉得多此一举。比如ajax过程中回调函数解析json格式字符串:
... function callback(str){ var json = eval('(' + str + ')'); } ...
通常直接使用eval,而非var json = window.eval('(' + str + ')');
又比如调试时使用alert,很少有人使用window.alert。但由于各个引擎实现差异,它们的区别还是有的。如下:
var x = 5; function fn(){ var x = 'jack'; eval('x=10;'); } fn(); alert(x); // -->5
所有浏览器中输出的都是5,说明调用fn后eval修改的是fn内的局部变量x,而非全局的x。即eval执行的闭包环境是在fn内。
修改下,把以上代码的eval换成window.eval,测试后发现各个浏览器中的表现不一样了。
IE6/7/8 : 仍然输出5,即没有修改全局变量x,修改的仍然是局部变量x
Firefox3.6.3/Safari4/Chrome6 dev/Opera10 : 输出10,修改的是全局变量x
测试IE9 Preview2,也是输出10,IE9开始向Firefox等靠拢了。
可以得出结论了,
IE6/7/8中,eval和window.eval一样,写在自定义函数内则是局部闭包,否则是全局闭包。
Firefox/Safari/Chrome/Opera/IE9中,eval同以上IE6/7/8,window.eval即使写在自定义函数内使用的也是全局闭包。
此外:IE中的window.execScript总是在全局闭包下执行,令人惊奇的是Chrome也支持该方法。呵,Chrome策略是标准,IE一个不能少。
评论
13 楼
greatghoul
2010-06-11
这种细微的差别,真是没有发现呢。
12 楼
kaki
2010-06-10
fyland 写道
真还没注意这种差异。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
这样处理时对汉字的显示常常出现问题啊,尤其是数据库非GBK的情况下。
11 楼
CrystalBear
2010-06-08
浏览器差异让人很纠结
10 楼
xukaipeng
2010-05-26
fyland 写道
真还没注意这种差异。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
这个总结的很不错。受教了
9 楼
安徒生的童话
2010-05-26
LZ很有研究精神啊
8 楼
akos
2010-05-25
给自己找事做, 变量命名非得弄得有冲突吗?
7 楼
CodingMouse
2010-05-25
chemzqm 写道
强人啊,这都能发现..
同感!
平时还真没注意加window.与不加之间到底有什么区别,许多教材上也是说只是书写上的省略,却不知各浏览器厂商都有自己的一套处理策略。哎!何时才能有一个标准产物啊。
6 楼
tonyruiyu
2010-05-24
fyland 写道
真还没注意这种差异。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
最好加个分号
return (new Function("return " + data + ";"))();
or:
return (new Function("return " + data + ";")).call(arguments.callee);
5 楼
zhengyutong
2010-05-24
function jsonDecode(data){
return (new Function("return " + data))();
}
领教了.....
return (new Function("return " + data))();
}
领教了.....
4 楼
ghyghoo8
2010-05-23
这个……学习了。。。
一直以为eval很好用,原来还有这等道理。。
拿来用了!
function jsonDecode(data){
return (new Function("return " + data))();
}
哈哈~强大啊!
一直以为eval很好用,原来还有这等道理。。
拿来用了!
function jsonDecode(data){
return (new Function("return " + data))();
}
哈哈~强大啊!
3 楼
chemzqm
2010-05-22
强人啊,这都能发现..
2 楼
xyztony1985
2010-05-22
fyland 写道
真还没注意这种差异。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
不错
1 楼
fyland
2010-05-21
真还没注意这种差异。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
return (new Function("return " + data))();
}
其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;
jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。
发表评论
-
仅Firefox中A元素包含Select时点击Select不能选择option
2014-09-26 11:03 1277这是在使用京东的一个日期组件时碰到的bug,重现bug的代码 ... -
IE11的API变化
2014-06-10 15:40 1131IE11已经登陆Win8.1,它的API有了很大变更 ... -
Button未设type属性时在非IE6/7中具有submit特性
2014-06-04 12:01 676如下 <!DOCTYPE html> < ... -
光标从编辑器移入本页面中的其它输入域后,IE中每次只在编辑器首部插入内容
2013-11-25 08:10 916做编辑器开发时碰到的 重现步骤: 1. 将光标 ... -
仅IE6/7不支持字符串属性/索引读取
2013-05-31 14:35 982IE6/7不支持字符串属性/索引读取(Property ac ... -
IE9/Firefox/Safari/Chrome/Opera支持模拟触发自定义DOM事件
2013-05-30 13:57 1146自定义DOM事件是在DOM3中定义的,它不是由DOM原生触发 ... -
各浏览器中innerHTML实现差异(2)
2012-05-17 07:40 1186如下代码 <p id="tit&q ... -
各浏览器中innerHTML实现差异(1)
2012-05-16 06:59 1408如下代码 <p id="tit&quo ... -
xhrhttprequest部分浏览器中不支持put/delete
2012-04-16 20:59 2851后端同事想采用REST风格,hailiang在看jQuery文 ... -
仅IE6/7浏览器SPAN元素包含块级元素会使SPAN的背景色显示
2012-02-23 18:19 1404这个bug发生在下面的网页,如下: http://yy ... -
设置iframe为可编辑状态后敲回车在各浏览器中输出的innerHTML不同
2012-02-14 18:57 2184测试代码如下 <!doctype html> ... -
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012-02-14 14:30 2755设置iframe的document.designMode为On ... -
各浏览器中for in顺序的差异
2012-02-06 20:04 1382这个问题在sohu博客中也有:写博客-插入图片图片顺序在Chr ... -
IE6/7不支持hashchange事件
2011-11-11 13:51 1401如下 <!doctype html> & ... -
设置元素浮动的几种方式
2011-11-10 11:25 1549们知道获取元素的浮动属性,各浏览器中使用的属性不同。大家都知道 ... -
textarea元素IE6/7/8/9/10中默认有上下滚动条
2011-11-10 11:19 1569IE下有上下滚动条。其它浏览器没有。先看一个示例 &l ... -
各情景下元素宽高的获取
2011-11-09 12:20 1708为了叙述简单,这里仅拿width示例。 情景一, ... -
元素未显示设置width/height时IE中无法使用currentStyle获取(默认为auto)
2011-11-09 12:13 1242我们知道获取元素的实际宽高在IE中可以使用currentSty ... -
各浏览器中使用getAttribute获取checkbox/radio的checked值不同
2011-11-08 21:18 1817如下 <!DOCTYPE HTML> < ... -
IE6/7不支持setAttribute设置style / 不支持getAttribute获取style属性值
2011-11-08 09:39 1447IE6/7中不能通过setAttribute设置元素的s ...
相关推荐
eval与window.eval的差别分析,学习js的朋友可以了解下。
对window.open进行封装, 使其更好用, 且更兼容, 很多人说window.open不兼容,其实不是, 因为不能直接执行, 必须通过用户手动触发才行;看代码: 代码如下 var openWindow = function(url, options) { var str = ""; ...
//设置样式 this.setStyle = function(name, value) { eval(“this.element.style.” + name + ” = ‘” + value + “‘”); } //获取样式 this.getStyle = function(name) { return eval(“this.element....
现在很多网站都上了各种前端反爬手段,无论手段如何,最重要的是要把包含反爬手段的前端javascript代码加密隐藏起来,然后在运行时实时解密动态执行。 动态执行js代码无非两种方法,即... window.__cr_eval = window.ev
当输入参数的类型为String时,它还会禁用与eval()类似的方法:1. eval('')2.(new Function(''))()3. window.setTimeout('',delay)4. window .setInterval('',delay)在网站中使用评估或类似方法时,...
Window Control Methods Section 13.9. The Location Object Section 13.10. The History Object Section 13.11. Multiple Windows and Frames Chapter 14. The Document Object Section 14.1. ...
const { parse , eval } = window . expressionEval ; 原料药 解析中 import { parse } from 'expression-eval' ; const ast = parse ( '1 + foo' ) ; 解析的结果是AST(抽象语法树),例如: { " ty
与FOCUS()相反. 65.select()指元素为选中状態. 66.防止用户对文本框中输入文本:onfocus="this.blur()" 67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML標记符)").length 68.JS中分为两种窗体...
语言:English 杀死经常用于弹出窗口和...只需覆盖window.atob,window.eval和window.open函数,即可防止它们执行应做的事情。 主要是在chrome商店中发布的,以避免chrome困扰我禁用自己设备上的“不安全”扩展程序。
杀死通常用于弹出窗口和...只需覆盖window.atob,window.eval和window.open函数,即可防止它们执行应做的事情。 最初在chrome商店中发布,以避免chrome困扰我禁用自己设备上的“不安全”扩展程序。 支持语言:English
return window . location . href } , function ( err , results ) { // Handle the results in node.js console . log ( results ) } ) 或者您想编写一个包含使用的所有 Ember 路由的 JSON 文件? var ...
< %# DataBinder.Eval(Container.DataItem, "数据字段1")%>’ & name=’<% # DataBinder.Eval(Container.DataItem, "数据字段2")%>’ /> 7.表格点击改变颜色 if (e.Item.ItemType == ListItemType.Item ||e....
eval(visble_property_printview + " = \"" + visble_property_false + "\""); } function window.onafterprint() { eval(visble_property_printview + " = \"" + visble_property_true + "\""); } //-->
Table of Contents 1. Introduction....................................................................................................................................................2 ...
自己学习中收集整理的技术文档,文章来源互联网,本文档只...window.location.href在firefox中不兼容的解决办法 ASP.NET 2.0中合并 GridView 的表头单元格 创建表头固定,表体可滚动的GridView VS2005常用快捷键 ...
该插件引入了e (eval)帮助器,以允许在模板中使用此语法: 这个附件不要使用eval 。 < button {{ action ( e " alert " ) " Hello " target = ( e " window " ) }} > onclick = window.alert("hello...
e.Item.Attributes.Add("onclick","window.open('Default.aspx?id=" + e.Item.Cells[0].Text + "');"); } 双击表格连接到另一页 在itemDataBind事件中 if(e.Item.ItemType == ListItemType.Item || e....
if (yycnt*yybilder){eval(yydiv+".yyto=setTimeout(argStr,yyto)");} } } function YY_Mousetrace(evnt) { if (yyns4) {if (evnt.pageX) {yy_ml=evnt.pageX; yy_mt=evnt.pageY;} } else{ yy_ml=(event....