Google Chrome 雷区之一:与众不同的eval实现
运行代码:
javascript:var eval2 = eval;with({a:1})eval2("a+2")
在chrome上运行是要报错的。
记得ecma262 3rd上有一句,eval不应该通过引用别名调用(可能是处于优化的考虑吧)。
不过以往的实现中都没把这句话放在心上。
chrome虽然没有完全严格遵循ecma的的限制,不过,貌似还是充分利用理ecma的优化指导。
好同学,不愧是时下最快的js引擎。
貌似Chrome在eval的实现上,更加贴近标准了。
不过,这也许仅仅是chrome的一个bug,也许会在若干明主的口水淹没后,开始兼容更多的事实标准。
Google Chrome 雷区之二:警惕中文
var x = {
"中文":"安全"
}
压缩后将变成:
var x={
中文:"危险"
}
基于rhino的压缩工具(JSA,YUI-Compressor),都会自动做上述优化,但是,貌似目前chrome对中文代码的支持有限
Google Chrome雷区之三--莫动arguments对象
arguments与参数变量的关联
javascript:+function(a){var a= 'false';alert(arguments[0])}(true)
输出的是:false,
firefox3 也是如此
javascript:+function(a){Array.prototype.splice.call(arguments,0,1);alert(a)}(1)
输出的是undefined 其他浏览器都不是。
再翻阅一下ECMA标准的描述
10.1.8 Arguments Object
When control enters an execution context for function code, an arguments object is created and initialised as follows:
* The value of the internal [[Prototype]] property of the arguments object is the original Object prototype object, the one that is the initial value of Object.prototype (see 15.2.3.1).
* A property is created with name callee and property attributes { DontEnum }. The initial value of this property is the Function object being executed. This allows anonymous functions to be recursive.
* A property is created with name length and property attributes { DontEnum }. The initial value of this property is the number of actual parameter values supplied by the caller.
* For each non-negative integer, arg, less than the value of the length property, a property is created with name ToString(arg) and property attributes { DontEnum }. The initial value of this property is the value of the corresponding actual parameter supplied by the caller. The first actual parameter value corresponds to arg = 0, the second to arg = 1, and so on. In the case when arg is less than the number of formal parameters for the Function object, this property shares its value with the corresponding property of the activation object. This means that changing this property changes the corresponding property of the activation object and vice versa.
应该说,Google的实现是最贴近标准的。
而其他浏览器都或多或少没能实现。
这时为什么呢?自然有他的理由....
而我们能做的,那就是开发过程中,少动这个对象吧。
分享到:
相关推荐
这款“谷歌Chrome浏览器x86版APK低版本Android4.4可用浏览器版本是72.0”是专为使用x86架构设备的用户设计的,如某些平板电脑和安卓模拟器。对于那些在Android 4.4(KitKat)系统上运行的设备,这是一个理想的解决...
另一方面,aa.txt 文件可能包含与插件相关的使用说明或注意事项,例如安装步骤、使用技巧、常见问题解答等。通常,这种文本文件会为用户提供额外的帮助信息,确保正确且有效地利用提供的资源。 在Chrome浏览器中...
Chrome浏览器是一款广受欢迎的网页浏览器,它以其稳定性和速度著称。然而,由于安全原因,Chrome默认不支持ActiveX插件,因为ActiveX主要在Internet Explorer中使用,它允许网页内容与用户的本地系统进行交互,这...
谷歌Chrome浏览器是由全球知名的科技公司谷歌(Google)开发的一款网页浏览器,自2008年发布以来,凭借其卓越的性能、简洁的界面以及强大的安全特性,迅速在全球范围内获得了广泛的认可和使用。它采用了先进的Blink...
Chrome浏览器调用OCX插件是一项技术,允许用户在Chrome中使用特定的ActiveX控件,这些控件通常用于提供Windows应用程序中不常见的功能。OCX(Object Container Exchange)是微软开发的一种组件对象模型(COM),它...
谷歌Chrome浏览器是由全球知名的科技公司Google开发的一款网络浏览器,它以快速、稳定和安全性著称。自2008年首次发布以来,Chrome迅速成为全球最受欢迎的浏览器之一,以其强大的性能和用户友好的界面赢得了广大用户...
本文档提供了Google Chrome浏览器的下载和安装方法、常见问题解答以及扩展插件推荐等多个方面的内容,为使用者提供了全面的指导和帮助。文档中详细介绍了Google Chrome浏览器的功能和优势,并提供了多个实例演示,让...
Java调用Chrome浏览器内核是开发桌面应用时一个常见的需求,尤其在需要嵌入Web页面或者与Web内容交互的场景下。CEF(Chromium Embedded Framework)是一个开源项目,它允许开发者将Google Chrome的Blink渲染引擎和V8...
在本示例中,我们将探讨如何使用JavaScript和Chrome浏览器来实现小票的打印。这个压缩包包含了实现这一目标的关键资源,包括一个名为`chrome调用打印机print.html`的HTML文件,以及两个指向百度经验页面的链接,这些...
Google Chrome 浏览器是一款由谷歌公司开发的高级网页浏览器...以上就是关于 Google Chrome 浏览器的一些基础使用教程和常见扩展程序的介绍,通过熟练掌握这些技巧和扩展,用户可以更加高效地进行网页浏览和信息获取。
1. **chrome** - 这是指Google Chrome浏览器,一个广泛使用的Web浏览器,支持各种扩展和插件以增强其功能。 2. **elasticsearch** - Elasticsearch 是一个基于Lucene的开源搜索引擎,它具有实时、分布式、可扩展的...
Chrome浏览器,全称为Google Chrome,是由谷歌公司开发的一款广受欢迎的免费网页浏览器。自2008年首次发布以来,Chrome凭借其高速、稳定、安全和用户友好的特性迅速占据了市场份额,成为全球最流行的浏览器之一。 ...
谷歌Chrome浏览器是一款非常流行的网页浏览工具,以其快速、安全、用户友好而闻名。"免安装版本"意味着这个压缩包提供了一种无需通过传统安装程序即可使用的Chrome浏览器方式。这种版本通常适用于那些不想在系统上...
Chromedriver是用于自动化测试Chrome浏览器的一种工具,它允许开发者编写脚本控制Chrome的行为。为了确保Chromedriver与Chrome版本之间的兼容性,通常推荐使用与Chrome相同或相近版本的Chromedriver。 - **下载地址...
首先,Chrome浏览器是Google开发的一款非常流行的网页浏览工具,以其快速、稳定和强大的功能受到全球用户的喜爱。在Chrome中,用户可以利用各种内置或第三方扩展来实现屏幕截图和PDF转换。 1. 屏幕截图:Chrome...
Chrome浏览器控件在Delphi开发中的应用是一种常见技术,它允许开发者将Google Chrome的核心渲染引擎集成到自定义的Windows应用程序中,从而创建出具有现代Web浏览功能的应用。本主题主要聚焦于Delphi版本的Chrome...
总结来说,通过在Chrome浏览器中注册协议处理程序并使用JavaScript触发调用,我们可以实现JS调用本地exe的功能。然而,这种技术应当谨慎使用,因为它涉及用户的安全,并且在多平台或多浏览器环境下可能面临兼容性...
标签“chrome”表明这个话题主要与Google Chrome浏览器相关,Chrome是目前最流行的浏览器之一,拥有强大的扩展生态系统,用户可以通过安装各种插件来增强其功能。 压缩包子文件“maozhua_2.5.1.crx”很可能是一个...
用户可以通过这个文件了解软件的具体使用方法、功能详解以及常见问题解答。通常,它会介绍如何启动软件、如何查找特定的缓存文件、如何导出数据到其他格式,以及如何通过时间戳或URL筛选浏览历史。 其次,...
本示例通过"java跨全域兼容ie/ff/chrome浏览器多文件上传(原创)"的标题,我们可以看出这是一个解决浏览器兼容性问题并实现跨域文件上传的解决方案。下面将详细解释这个主题涉及的关键知识点。 1. **跨域资源共享 ...