- 浏览: 1162113 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1391这是在使用京东的一个日期组件时碰到的bug,重现bug的代码 ... -
IE11的API变化
2014-06-10 15:40 1237IE11已经登陆Win8.1,它的API有了很大变更 ... -
Button未设type属性时在非IE6/7中具有submit特性
2014-06-04 12:01 781如下 <!DOCTYPE html> < ... -
光标从编辑器移入本页面中的其它输入域后,IE中每次只在编辑器首部插入内容
2013-11-25 08:10 1018做编辑器开发时碰到的 重现步骤: 1. 将光标 ... -
仅IE6/7不支持字符串属性/索引读取
2013-05-31 14:35 1119IE6/7不支持字符串属性/索引读取(Property ac ... -
IE9/Firefox/Safari/Chrome/Opera支持模拟触发自定义DOM事件
2013-05-30 13:57 1247自定义DOM事件是在DOM3中定义的,它不是由DOM原生触发 ... -
各浏览器中innerHTML实现差异(2)
2012-05-17 07:40 1281如下代码 <p id="tit&q ... -
各浏览器中innerHTML实现差异(1)
2012-05-16 06:59 1522如下代码 <p id="tit&quo ... -
xhrhttprequest部分浏览器中不支持put/delete
2012-04-16 20:59 2978后端同事想采用REST风格,hailiang在看jQuery文 ... -
仅IE6/7浏览器SPAN元素包含块级元素会使SPAN的背景色显示
2012-02-23 18:19 1493这个bug发生在下面的网页,如下: http://yy ... -
设置iframe为可编辑状态后敲回车在各浏览器中输出的innerHTML不同
2012-02-14 18:57 2283测试代码如下 <!doctype html> ... -
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012-02-14 14:30 2849设置iframe的document.designMode为On ... -
各浏览器中for in顺序的差异
2012-02-06 20:04 1521这个问题在sohu博客中也有:写博客-插入图片图片顺序在Chr ... -
IE6/7不支持hashchange事件
2011-11-11 13:51 1496如下 <!doctype html> & ... -
设置元素浮动的几种方式
2011-11-10 11:25 1660们知道获取元素的浮动属性,各浏览器中使用的属性不同。大家都知道 ... -
textarea元素IE6/7/8/9/10中默认有上下滚动条
2011-11-10 11:19 1689IE下有上下滚动条。其它浏览器没有。先看一个示例 &l ... -
各情景下元素宽高的获取
2011-11-09 12:20 1806为了叙述简单,这里仅拿width示例。 情景一, ... -
元素未显示设置width/height时IE中无法使用currentStyle获取(默认为auto)
2011-11-09 12:13 1335我们知道获取元素的实际宽高在IE中可以使用currentSty ... -
各浏览器中使用getAttribute获取checkbox/radio的checked值不同
2011-11-08 21:18 1912如下 <!DOCTYPE HTML> < ... -
IE6/7不支持setAttribute设置style / 不支持getAttribute获取style属性值
2011-11-08 09:39 1539IE6/7中不能通过setAttribute设置元素的s ...
相关推荐
而在IE6/7/8中,`window.eval`的行为与`eval`相同,即在函数内部调用时,它仍保持在局部作用域。 此外,IE浏览器还有一个名为`window.execScript`的函数,它始终在全局作用域中执行代码,不论其调用位置。值得注意...
对window.open进行封装, 使其更好用, 且更兼容, 很多人说window.open不兼容,其实不是, 因为不能直接执行, 必须通过用户手动触发才行;看代码: 代码如下 var openWindow = function(url, options) { var str = ""; ...
`eval(window[userAction])`将尝试执行`window.swapImage`,如果它是一个函数的话。 然而,`eval()`的主要问题是安全性。因为`eval()`能够执行任意的JavaScript代码,如果用户能够控制传入`eval()`的字符串,那么就...
在JavaScript中,`window.js`通常是一个用于处理与浏览器窗口或页面交互的脚本文件。这个文件中的功能主要集中在获取和操作页面上的元素,以及处理与这些元素相关的样式和事件。以下是对`window.js`中部分代码的详细...
2. **启动与停止Redis**: - 启动Redis服务:使用`redis-server.exe --service-start`命令。 - 停止Redis服务:使用`redis-server.exe --service-stop`命令。 3. **配置Redis**: - Redis的主要配置文件是`redis...
现在很多网站都上了各种前端反爬手段,无论手段如何,最重要的是要把包含反爬手段的前端javascript代码加密隐藏起来,然后在运行时实时解密动态执行。 动态执行js代码无非两种方法,即... window.__cr_eval = window.ev
2. 使用`window.eval()`:在某些情况下,如果必须使用`eval()`,可以将它限制在全局作用域,通过`window.eval()`调用,这样Closure Compiler可以识别这是一个全局操作。 3. 使用`@nocache`注释:在`eval()`前添加`/...
可以使用`Document.Window.Eval()`来执行JavaScript代码,关闭弹出窗口: ```csharp private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { foreach (HtmlElement ...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它...此外,`JSON.stringify()`方法是将JavaScript对象转化为JSON字符串的对应操作,与`JSON.parse()`一起,它们构成了JSON在JavaScript中的基本操作。
根据提供的文件信息,我们可以分析出该文件主要涉及的是HTML与JavaScript相关的知识点,特别是与`<iframe>`元素以及JavaScript中的`eval()`函数的应用有关。接下来,我们将深入探讨这些知识点。 ### ...
这里需要注意的是,虽然`X2.Eval`内部也使用了`eval`,但由于它是通过`window.eval`调用的,所以它仍然会在当前作用域内执行。 #### 六、总结 尽管`eval`函数提供了强大的功能,但鉴于其可能带来的安全性和性能...
当输入参数的类型为String时,它还会禁用与eval()类似的方法:1. eval('')2.(new Function(''))()3. window.setTimeout('',delay)4. window .setInterval('',delay)在网站中使用评估或类似方法时,...
这里的代码利用了`ExternalInterface.call`方法调用了JavaScript中的`eval`函数来执行`window.location.href`,从而获取到了完整的URL。 ##### 2. 获取协议 协议可以通过`window.location.protocol`来获取。例如:...
temp2[1].left = (window.innerWidth - temp2[1].width) / 2; temp2[1].top = (window.innerHeight - temp2[1].height) / 2; function openit() { if (document.layers) { temp[1].left -= speed; temp2[1]....
const { parse , eval } = window . expressionEval ; 原料药 解析中 import { parse } from 'expression-eval' ; const ast = parse ( '1 + foo' ) ; 解析的结果是AST(抽象语法树),例如: { " ty
### JavaScript中的`eval`与`with`用法详解 #### 一、`eval`函数 ##### 1. 定义 `eval`是JavaScript中一个非常强大的内置函数,它可以将字符串解析并执行为JavaScript代码。这使得开发者能够在运行时动态地创建和...