我写这篇文章的时候, ECMAScript 5已经在最后的草稿中了。 这是由于包含一个严格的模式,这将阻止您分配给全局对象,使用eval和其他限制。 ( John Resig的文章是一个很好的介绍。) 通过在文件(或函数)的顶部包含string“use strict”,可以触发这种神奇的理智保存模式。但是,在较老的环境中,“use strict”是无效的。 如果在严格的环境中添加“严格使用”,而不是在严格的环境下进行testing,那么您可能会留下一个不真正严格的代码的时间炸弹,这个代码在真正达到严格的环境时会被破坏。 哪个环境真的尊重“严格使用”?
有没有人知道ECMAScript的实现(我没有蒸发器)实施的.NET CLR / DLR ? 理想情况下,犀牛是Java的东西。 在.NET Framework / Mono Framework上运行的一个可靠的Rhino端口将是完美的。 我只看到了一些提到的项目,但从来没有见过任何亮相,或者实际上我曾经能够运行脚本的东西。 这就是我已经知道的: MSScriptControl ActiveX控件 :AFAIK,这是微软最后一个真正符合ECMAScript标准的工具(运行JScript 5.7)。 我已经与MSScriptControl集成,但不认为COM互操作是这个问题的答案。 x64是这个选项的杀手。 JScript.NET :我不计算JScript.NET,因为它永远不能成功parsing我的真实脚本。 它似乎有closures的麻烦。 托pipeJScript :听起来像我想要的,但似乎是死在水中。 这是DLR的一个主要的示例实施,但是随后与SilverLight纠缠在一起,似乎自2007年以来已经成为优先事项。关于这一情况的可靠来源将是有帮助的。 MyJScript :构build为DLR的教程实现。 任何人都知道这是多么完整的实施? Jint :.NET的JavaScript解释器。 目前还不支持柯里或try – finally 。 .NET的RemObjects脚本 :一个有趣的竞争者仍在工作。 我对他们的市场营销感到困惑,因为这听起来可能最终是合适的。 如果有人知道更多,这也会有所帮助。 V8 for .NET :如果有人将V8移植到.NET,这将会很棒。 据我所知,在这方面也没有太大的努力。 链接是从一个托pipe的C ++包装器调用它的想法。 对于后台,我希望能够从.NET中执行JavaScript; 即将一组脚本加载到上下文中,并调用该上下文并检索执行结果。 目前我通过繁琐的COM Interop跳过使用MSScriptControl。 COM的不一致使得部署和确保一致的执行非常困难。 我希望能够从.NET内部执行相当复杂的JavaScripttesting工具。 这不是用于创build用户macros或简单的小脚本; 我需要一个像Rhino这样的真正的JavaScript环境。 如果实现在CLR(而不是COM)上运行,这对于当前的一些问题确实有帮助。
所以Safari和Chrome已经开始在他们的beta版中实现一些ES5的东西。 例如Object.create就在其中。 你们有没有人知道是否有网站显示在浏览器中取得的进展? ATM我需要使用Object.freeze,并希望看看哪些浏览器(如果有)支持。
我的一位朋友提请我注意第四届欧洲Lisp研讨会的欢迎辞: … Lisp方言的实现和应用,包括Common Lisp,Scheme,Emacs Lisp,AutoLisp,ISLISP,Dylan,Clojure,ACL2, ECMAScript ,… 然后问ECMAScript是否真是Lisp的一种方言。 这真的可以考虑吗? 为什么? 是否有一套明确而清晰的标准来帮助我们检测一种语言是否是Lisp的一种方言? 或者是一个非常松散的方言(在这种情况下,我们可以添加Python,Perl,Haskell等到Lisp方言列表?)
JavaScript不关心你的string是双引号"double"还是单引号'single' 。 ECMAScript 5严格模式的每个例子都通过双引号中的"use strict"来启用。 我可以做以下(单引号): alert(function(){ 'use strict'; return !this; }()); 如果启用了严格模式,则这将返回true;如果不是,则返回false 。
ECMAScript5中严格模式编译指示的范围是什么? "use strict"; 我想这样做(主要是因为JSLint没有抱怨): "use strict"; (function () { // my stuff here… }()); 但我不确定是否会破坏其他代码。 我知道,我可以做到这一点,这将编译范围的function… (function () { "use strict"; // my stuff here… }()); 但JSLint抱怨(当“strict”JSLint选项被启用时),因为它认为你在启用“use strict”之前执行的代码。 这是我的问题。 如果我有fileA.js: "use strict"; // do some stuff 和fileB.js: eval( somecodesnippet ); // disallowed by "use strict" 然后按照相同的顺序将它们包含在我的html页面中,这个编译指示是否会被限制到文件中,或者这个编译指示是否会stream入到fileB中,从而阻止了eval的执行?
有人可以告诉我,哪个ECMA版本的IN操作符是可用的,哪些浏览器(版本)支持它? 说明: IN运营商可以使用如下: var myObject = { Firstname: 'Foo', Lastname: 'Bar' }; if('Lastname' in myObject){ // Lastname is an attribute of myObject }
有没有办法检查是否严格模式使用严格执行,我们要执行不同的代码严格模式和其他代码非严格模式。 寻找像isStrictMode();//boolean
在MDC或ECMAscript规范中,我没有发现任何关于我的问题。 也许有人知道一个更“黑客”的方式来解决这个问题。 我在我的环境中调用每个JavaScript文件的"use strict" 。 我的所有文件都是这样开始的 (function(win, doc, undef) { "use strict"; // code & functions }(window, window.document)); 现在,我有一个处理错误的自定义函数。 该函数使用.caller属性来提供上下文堆栈跟踪 。 看起来像这样: var chain = (function() { var _parent = _error, _ret = ''; while( _parent.caller ) { _ret += ' -> ' + _parent.caller.name; _parent = _parent.caller; } return _ret; }()); 当然,在严格模式下.caller是一个不可删除的道具,当检索时会抛出。 所以我的问题是,有没有人知道如何禁用更严格的“function明智”? "use […]
我试图searchJavaScript引用,但没有可用的。 最好的两个build议的来源是MDN(Mozilla开发者networking)和W3Schools。 为什么?