JScript,JavaScript和ECMA Script之间的功能差异是什么?

时间:2013-09-13 18:54:16

标签: javascript jscript ecmascript-5

长问题

首先,我知道ECMA Script是标准,JavaScript和JScript是实现。我知道这三个都有自己的规范,并且有很多很多引擎,解释器和实现,但我的具体问题是:

假设为这三者中的每一个实现了一个完美的解释器和引擎,你可以做一个你在另一个中不能做的,或者哪一个会产生不同于另外两个的效果?

我理解这是一个广泛的问题,但由于两种语言(JScript和JavaScript)都来自规范(ECMAScript),实际差异应该可以忽略不计。

同样,我不是在谈论跨浏览器的兼容性(IE8和IE9使用了不同的引擎,这些引擎以不同的方式解释了JScript,标准随着时间的推移而发生了变化),但纯ECMA5,JavaScript(如果有官方标准,我猜测最接近的是W3CMDN,以及JScript(显然维持在MSDN(如图))。

备注:

这与过期五年的this question不重复,并且涉及术语的定义,而不是语言的应用,或this question,它再次解释了JavaScript和JScript是ECMAScript的方言,但没有任何功能差异。

This question是最接近的,但具体而言我所追求的是技术陷阱,开发人员期待X并且让Y应该警惕。一个很好的例子来自this question,其中包含以下代码:

// just normal, casual null hanging out in the sun
var nullA = null;
// query for non existing element, should get null, same behaviour also for getElementById
var nullB = document.querySelector('asdfasfdf');

// they are equal
console.log(nullA === nullB);

// false
nullA instanceof Object;

// will throw 'Object expected' error in ie8. Black magic
nullB instanceof Object;

显示了JScript实现方面的差异,理论上它们不符合ECMA标准。

2 个答案:

答案 0 :(得分:5)

EMCAScript标准的实现不仅仅是使规范规则生动的代码。 ECMAScript标准故意不完整:

  

支持ECMAScript的每个Web浏览器和服务器都提供自己的主机环境,完成ECMAScript执行环境。

ECMAScript实现必须提供“主机环境”。对于Web浏览器,该主机环境包括DOM操作API和W3C和WHATWG指定的其他API。 ECMAScript没有指定这些API的行为(实际上,存在)。

用于完成实现的“主机环境”的对象称为“主机对象”。主机对象不一定遵循正常的对象规则:它们可能会为在本机(非主机)对象上有效的属性访问引发错误,或者它们可能允许本机禁止的某些操作。

JScript和JavaScript可能以不同方式实现其DOM API。哪些实现在某些特定点上是“正确的”不是ECMAScript合规性的问题,而是符合W3C标准的问题。即使DOM对象似乎表现出一些与“正常”ECMAScript行为相反的行为(如instanceof错误示例),根据section 8.6.2,它仍然是合法的ECMAScript:

  

主机对象可以支持具有任何依赖于实现的行为的这些内部属性,只要它与本文档中声明的特定主机对象限制一致。

“内部属性”在这里包括逻辑操作,例如“按名称获取对象属性的值”,编号为[[Get]]。主机对象的自定义[[Get]]实现可能会抛出错误,或忽略先前设置的属性。

API差异与实际的语言差异不同。 语言差异表明支持的词汇语法或本机(非主机)对象的行为存在差异。实际语言的一些差异包括:

  • JScript允许导致conditional compilation
  • cc_on条评论
  • Mozilla的JavaScript支持yield关键字和生成器,以及一些不在ES5规范中的其他内容(但可能会在ES6中)
  • 所有浏览器都支持块中的函数声明,这不是合法的ECMAScript语法:

    function foo() {
        bar();
    
        if(condition) {
            function bar() { } // this is not legal
        }
    }
    

    支持此功能的浏览器(即所有'em)正在扩展ECMAScript语言。此外,在该示例中,JScript将hoist bar,而Mozilla的JavaScript则不会。这是因为两个浏览器以不兼容的方式扩展了ECMAScript语言。

答案 1 :(得分:0)

here,您可以下载包含处理标准(3/5)和Microsoft扩展程序的文档(MS-ES[35](EX)?.pdf)的.pdf .pd文件。