问题标签 [ecma262]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 为什么 ECMAScript 仍然不是 W3C 的推荐?
理论上,浏览器可以支持多种编程语言来编写网页的客户端脚本。实际上,ECMAScript 是唯一一种在所有浏览器中广泛实现和使用的脚本。所以对于大多数人来说,它是网络不可或缺的一部分。
然而,它从未被 W3C 推荐为网页脚本的推荐。HTML5 似乎也促进了它,尽管客户端交互性变得越来越重要。为什么会这样?
- 是为了防止网络平台上的编程语言垄断吗?(显然失败了)
- 是因为 W3C 更喜欢只关注 Web 的声明性方面吗?
- 或者仅仅是一种政治立场?
javascript - JavaScript 语法中有效的左侧表达式是什么?
好的,我们都知道有效的左侧表达式是什么。有点儿。*
但是,看看ECMA-Script standard的定义,我很困惑:
这只是定义中的错误,还是我在这里弄错了?我的意思是,这实际上不意味着
应该是有效的赋值表达式?
*根据我的谦虚理解,这将更有意义:
javascript - ES5 中的 Object.defineProperty?
我正在看到有关使枚举可配置的“新” Object.create 的帖子。但是,它依赖于 Object.defineProperty 方法。我找不到此方法的跨浏览器实现。
我们是否坚持为旧的 Object.create 编写代码?我不能写在 IE6/7 中不起作用的东西。
javascript - ECMAScript 中函数对象表达式的优先级
为了实现一个发出 ECMAScript 的微型编译器,我需要知道函数对象表达式绑定的强度,即“运算符”的优先级是什么
function(a1, a2, ...) { ... }
?
例如,
function(a1, a2, ...) { ... } (b1, b2, ...)
应该如何解析?为了得到想要的结果,即将 b1, b2, ... 应用于函数对象,我必须在 Rhino 解释器中使用括号括住函数对象。
javascript - ECMA-/Javascripts Array.prototype.forEach
Javascript (ECMAscript)Array.prototype.forEach
从版本 1.6 (ECMAscript edition 3, 2005) 开始支持该方法。因此,相当多的浏览器已经支持该方法,并且与 jQuery 的$.each()
方法相比,它的速度非常快。
(实际上它击败了所有的实现,不管是哪个 Javascript 库)
与 jQuery 相比,它的速度大约快 60-70%。在 JSPerf上的forEach 与 jQuery上自己尝试一下。
到目前为止,我使用它的唯一缺点是,我无法想办法尽早中断迭代。Like for
, while
and do-while
have a break
statement, jQuerys.each()
支持return false
打破循环。
我查看了ECMAScript 第 5 版规范(我发现的最新版本),但他们没有提到该循环的早期中断。
那么,问题来了,道格拉斯·克罗克福德先生会称其为design error
吗?
我是否遗漏了什么并且有可能提前打破这样的循环?
编辑
感谢您到目前为止的答案。我想既然没有人想出一个“本机”解决方案,那真的没有实现(也许是一个特性?)。无论如何,我不太喜欢建议的方法,所以我胡闹了一下,终于找到了我喜欢的方法(至少,更好)。好像:
这是“真正的”生产代码。我寻找了一种查找 css3 转换属性的好方法,但我迷失在 ecma5 规范和奇怪的 Javascript 论坛中:-)
因此,您可以将数组对象本身作为第三个参数传递给.forEach
回调。我从原始数组创建一个副本,一旦找到我要查找的内容,就会调用slice(0)
并将其属性设置为 0。.length
效果很好。
如果有人提出更好的解决方案,我当然会编辑它。
javascript - 如何确保 ES3 程序将在 ES5 引擎中运行?
所以 ECMAScript 5 引入了一些与 ECMAScript 3 不兼容的地方。
示例:
已经写了很多文章,说明在 ES5 严格模式下this === null || this === undefined
是可能的:
但是,该标准 真正建议的是 ES5 引擎也允许在非严格模式下这样做:
15.3.4.3 ... thisArg 值未经修改作为
this
值传递。这是对第 3 版的更改,其中 aundefined
或null
thisArg 被替换为全局对象,而 ToObject 应用于所有其他值,并且该结果作为this
值传递。
目前,IE9 是唯一真正以这种方式实现 ES5 的浏览器,事实证明这可能会破坏当前的脚本。伟大的。
ES5 规范的 Annix E列出了许多其他不兼容性。
那么,确保我们久经考验的 ES3 脚本能够继续完美运行的最佳方法是什么?某种自动化测试套件?我们必须手动测试吗?
javascript - 为什么`typeof this`返回“object”?
我在 Chrome、Firefox 和 Safari 中看到了相同的结果,所以我认为它符合规范,但是......为什么?这在规范中是在哪里定义的?为什么不用于功能?
javascript - Javascript类型的最大大小?
调查 javascript 类型我试图找出某些数据类型的最大存储大小是多少。例如,我设置了一个快速递归算法来增加 var 大小,直到浏览器崩溃,对于我现有版本的 chrome 上的字符串,它最终接近 128mb(或者可能是 256)。
我一直在以痛苦的方式这样做,因为我找不到任何关于此的规范,但是不断的浏览器崩溃使这是一个痛苦的试验(由于某种原因,try catch 似乎对这个特定问题毫无用处)。
我也在寻找有关其他类型的最大存储大小的信息(数组、对象、函数、字符串、数字、布尔值......)
EMCA-262 第 8.4 节对此含糊其辞
字符串的长度是其中元素的数量(即 16 位值)。空字符串的长度为零,因此不包含任何元素。
...所以也许这是需要确定为在浏览器中实现的东西?
然而,ECMA 确实告诉我们有关数字的信息,例如,
Number 类型正好有 18437736874454810627(即 2^64−2^53+3)个值,代表二进制浮点算术的 IEEE 标准中指定的双精度 64 位格式 IEEE 754 值,除了IEEE 标准的 9007199254740990(即 2^53−2)个不同的“非数字”值在 ECMAScript 中表示为单个特殊的 NaN 值。
但后来我看不到任何关于物体的东西。
我可以期待在浏览器中使用什么?是否有任何代码库可以帮助管理非常大的对象和字符串?
我可以在单个脚本中分配多少内存?
javascript - ECMAScript 真的是 Lisp 的方言吗?
我的一个朋友提请我注意第四届欧洲 Lisp 研讨会的欢迎词:
... 任何 Lisp 方言的实现和应用,包括 Common Lisp、Scheme、Emacs Lisp、AutoLisp、ISLISP、Dylan、Clojure、ACL2、ECMAScript ......
然后问ECMAScript是否真的是Lisp的方言。真的可以这么认为吗?为什么?
是否有一套定义明确且明确的标准来帮助我们检测一种语言是否是 Lisp 的方言?或者是一种非常松散的方言(在这种情况下,我们可以将 Python、Perl、Haskell 等添加到 Lisp 方言列表中吗?)
javascript - JavaScript 中的间接函数调用
有类似的东西
但是还有这个
在这种情况下,“1”似乎没有多大意义,以下工作正常:
您能否指出描述该语法的 ECMAScript 的特定部分?