- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
长问题
首先,我知道 ECMA Script 是标准,JavaScript 和 JScript 是实现。我知道这三个都有自己的规范维护,并且有很多很多引擎、解释器和实现,但我的具体问题是:
假设为这三个中的每一个都实现了一个完美的解释器和引擎,你可以在一个中做什么而在另一个中不能做什么,或者在一个中与其他两个中有什么不同的效果?
我知道这是一个广泛的问题,但由于两种语言(JScript 和 JavaScript)都源自规范 (ECMAScript),因此实际差异应该可以忽略不计。
再次声明,我不是在谈论跨浏览器兼容性(IE8 和 IE9 使用不同的引擎对 JScript 的解释不同,并且标准随着时间的推移而改变),而是纯粹的 ECMA5,JavaScript(如果有官方标准,我想最接近的是 W3C 或可能是 MDN 和 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 标准。
最佳答案
EMCAScript 标准的实现不仅仅是将规范规则变为现实的代码。 ECMAScript 标准故意不完整:
Each Web browser and server that supports ECMAScript supplies its own host environment, completing the ECMAScript execution environment.
ECMAScript 实现必须提供“宿主环境”。对于 Web 浏览器,该主机环境包括 DOM 操作 API 以及 W3C 和 WHATWG 指定的其他 API。 ECMAScript 未指定这些 API 的行为(实际上,存在)。
用于完成实现的“宿主环境”的对象称为“宿主对象”。宿主对象不一定要遵循正常的对象规则:它们可能会抛出在 native (非宿主)对象上有效的属性访问错误,或者它们可能允许 native 不允许的某些操作。
JScript 和 JavaScript 可能以不同方式实现它们的 DOM API。在某些特定点上哪个实现是“正确的”不是 ECMAScript 合规性的问题,而是是否符合 W3C 标准的问题。即使 DOM 对象似乎表现出一些与“正常”ECMAScript 行为相反的行为(如您的 instanceof
错误示例),根据 section 8.6.2,它仍然是合法的 ECMAScript。 :
Host objects may support these internal properties with any implementation-dependent behaviour as long as it is consistent with the specific host object restrictions stated in this document.
这里的“内部属性”包括逻辑操作,如“通过名称获取对象属性的值”,编码为[[Get]]
。宿主对象的自定义 [[Get]]
实现可能会引发错误,或忽略先前设置的属性。
API 差异不同于实际的语言 差异。 语言 的差异表明受支持的词法语法或 native (非宿主)对象的行为存在差异。实际语言的一些差异包括:
cc_on
注释导致 conditional compilation yield
关键字、生成器以及 ES5 规范中没有的其他一些东西(但可能会出现在 ES6 中)所有浏览器都支持 block 中的函数声明,这是不合法的 ECMAScript 语法:
function foo() {
bar();
if(condition) {
function bar() { } // this is not legal
}
}
支持此功能的浏览器(即所有浏览器)正在扩展 ECMAScript 语言。此外,JScript 将 hoist bar
在那个例子中,而 Mozilla 的 JavaScript 不会。这是因为两个浏览器以不兼容的方式扩展了 ECMAScript 语言。
关于javascript - JScript、JavaScript 和 ECMA Script 之间的功能差异是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18793295/
我刚刚访问了official github page TC39 并注意到一些名称以数字结尾,例如: TC39 ecma-262 ecma-402 这些数字从何而来?为什么不是 TC47、ecma-77
我正在编写一个基于 ECMA-262 的 JavaScript 解析器.我很想知道我需要改变多少才能做到这一点 ECMA-357兼容。 有语法差异吗? 最佳答案 有许多语法扩展。最重要的是 XML 文
在 Ecma-334(C# 语言规范第 4 版)中,附件 A. 语法,A.1.1 节行终止符: new-line:: Carriage return character (U+000D) Li
我正在尝试在我的 CQ 组件中运行一些服务器端 ECMAScript。 有没有办法在我的 /components/myComp/script.ecma 中包含/导入/需要其他文件(实际上是 Under
原因是,虽然我们可以在Javascript中使用伪经典继承,但实际上我们必须实现自己的extend或inherit。 关于原型(prototype)继承——我认为它确实有这样的特性,如果使用 foo.
我正在寻找 ECMAScript 替代方案来作为自定义应用程序逻辑的脚本语言。 ECMA 有一些我喜欢的地方,尤其是新规范(如 AS3)的语法。 不幸的是,AS3 引擎不是开源的,无法集成到项目中。我
我有一个服务在我的 CQ5 实例上运行,我想从工作流中调用它的方法。我的问题是,如何从 ECMA 脚本中获取服务的引用? 我已经试过了: var myService= sling.getService
在 ReactJS 中工作,我有许多具有相同导入的类: import MyClass from './some/path/foo.js'; import MyClass2 from './some/p
我正在阅读以下内容 presentation ,最后它提到了将在 ECMA6 脚本中引入的后缀条件。它提供了以下用例场景: console.log("42") if question is true;
有人知道如何在 ECMA Script(datapower) 中使用 xpath 表达式访问 XML 数据吗? IBM 信息中心没有关于如何访问 XML 数据的信息 如果您有任何用于访问 XML 数据
有谁知道吊装规范是什么时候出台的? Internet Explorer 版本 6 是否支持它? 我没有意识到提升的存在,因为最近我的所有 JavaScript 代码都被转译了。 当我向老板解释他的 J
我试图理解 JavaScript 中 === 运算符的确切算法。它被定义为类似 The comparison x === y, where x and y are values, produces t
首先 – 我们处于未涉足的领域,因此虽然它可以在最新的 Firefox 中运行,但 MDN 上的文档在撰写本文时尚未准备好。稍后我会修复MDN(也许还有很多地方需要修复),所以我会提供一个glossa
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
首先:使用 Actipro SyntaxEditor 中的 LL(*) 解析器。不过,这可以适用于任何 LL(k) 解析器。 我目前正在尝试为 Javascript 编写一个有效的 LL(k) 语法(
我在查找 JavaScript 的新函数时发现了 ECMAScript/ECMA 5。 因为我从未听说过它,所以我仔细研究了它,发现它以不同的名称形式出现,例如: JavaScript, JScrip
最近,我阅读了 ECMAScript 语言规范。我不打算阅读整个规范,只是挑选了一些部分。我遇到了很多问题,其中一个是这样的: ToLength 1.Let len be ToInteger(argu
我想知道为什么 ECMA 脚本不支持开箱即用的整数。我当然知道有某种整数(这个问题的答案中有一个很好的总结:Difference between floats and ints in Javascri
我在通过 JQuery 查询 SharePoint 列表 (2010) 时遇到此错误集合尚未初始化。尚未请求或请求尚未执行。可能需要明确请求。 我循环浏览 html 选择元素中的所有选项并查询 Sha
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我是一名优秀的程序员,十分优秀!