问题标签 [ecmascript-harmony]
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.
node.js - 在代理上下文中运行代码
我正在试验 Harmony 代理,我想在代理上下文中运行代码,这意味着代码的全局对象将是代理。例如,如果我在代码中调用函数 foo(),它将由代理 get() 方法管理。
但是使用 Proxy.create() 和 vm.runInNewContext() 不起作用,似乎 Proxy 对象被新的上下文对象覆盖并失去了他的属性。
有什么办法可以实现我想要做的事情吗?
// 编辑
上面的代码效果很好,但是我希望可以不用this
语句,直接引用全局上下文。
node.js - 是否有 Node.js 的标志列表?
我正在尝试查找 Node.js 接受的所有标志的列表,特别是那些用于 ES6-Harmony 功能的标志,但我找不到任何标志。有这样的吗?
javascript - 关于向 JavaScript 添加适当的语言环境支持,我可以遵循任何当前的建议吗?
尽管所有主要的操作系统和编程语言/API 至少几十年来都支持语言环境,但似乎 JavaScript 仍然没有!
随着 JavaScript 在浏览器和服务器上越来越成为一种完整的应用程序编程语言,缺乏真正的语言环境支持正成为一个真正的问题。
是否有任何建议将语言环境支持添加到 EcmaScript 标准中,因为它存在于其他语言中?作为“和谐”项目的一部分还是其他任何地方?我愿意支持和宣传任何这样的提议。
(这是我上一个问题的后续:是否可以通过JavaScript 中的浏览器确定操作系统中设置的用户区域设置的国家/地区? )
javascript - Es6:能够在设置/更新/删除对象属性时调用自定义方法?
我相信我已经读过即将到来的 ES6 定义允许在设置、更新或删除对象属性时调用自定义的可定义方法。但是,我再也找不到博客文章来支持它了。
这个对吗?我相信这个功能被称为“代理”,虽然我找不到任何决定性的东西。
此外,现在可以使用 es6-shim 了吗?( https://github.com/paulmillr/es6-shim ) 也许我正在寻找新的地图功能,但我再次不确定。
任何人都可以为我指出一个明确的指针吗?
javascript - Javascript 可选类型提示
当编程语言是静态类型时,编译器可以更精确地分配内存,因此通常性能更高(在所有其他条件相同的情况下)。
我相信 ES4 引入了可选的类型提示(据我了解,由于 actionscript,Adobe 在其规范中发挥了重要作用)。因此,javascript 是否正式支持类型提示?ES6 会支持原生变量的可选类型提示吗?
如果 Javascript 确实支持类型提示,是否有任何基准可以显示它在性能方面的回报?我还没有看到一个开源项目使用它。
javascript - *something* if *expression* JavaScript (FF) 中的语法
我看到一些例子表明 Firefox 支持某种 JavaScript 语法,如*something* if *expression*;
.
作为我正在谈论的示例,请参阅此 MDN 文章,其中包含以下示例:
我的问题是:
用什么名字来描述这种语法?我主要想知道这一点,以便我可以谷歌它并阅读更多关于它的信息。我已经尽我所能尝试谷歌搜索,但无法将正确的术语放在一起以获得有用的结果。
这种语法可以存在于数组理解之外的其他地方吗?我觉得我已经看到了在数组之外使用的其他示例(例如上面的示例),但我不确定。
在哪里可以阅读有关此语法的更多信息?
除了火狐还有其他浏览器支持吗?
这个特性是 ES5 中的还是计划用于 ES-harmony 的?
javascript - ES6 什么时候可以在 IE 中使用?
如果您真的知道答案或可以提供一些信息,这是一个合理的问题。
Firefox 和 Chrome 一直致力于在 ES Harmony 中包含许多功能......
我的问题实际上是两部分:
- 有谁知道 ES6 什么时候会暂时定型?
- Internet Explorer 支持这些功能需要多长时间?我假设它将是IE11。IE11 有预计的发布日期吗?
javascript - ReturnIfAbrupt 在 ES6 草案中是什么意思?
我目前正在为 ES6 草案实现一些 shims。我想知道是否有人可以告诉我是什么ReturnIfAbrupt
意思。例如,我的实现Number.toInt
(调用 internal[[ToInteger]]
如下:
步骤 2 是ReturnIfAbrupt(number)
。你会注意到我目前有// ?
这一步,因为我不知道该怎么做。它说的时候是什么意思ReturnIfAbrupt(...)
?
我已经阅读了ReturnIfAbrupt
草稿中的部分,但是我无法理解第 2 步要做// ?
什么,在上面的代码中要替换什么。
从我的阅读来看,可能什么都不应该做,这ReturnIfAbrupt
一步只是意味着让 ToNumber 中发生的任何错误向上传播,退出函数。但是,这似乎过于冗长,因为我认为这是不言而喻的。此外,在我看来,它ToNumber
甚至不会引发错误。有人可以确认或帮助我理解真正的含义吗?
javascript - 在 ES6 (ECMAScript 6) 中访问 [[NativeBrand]] / [[Class]]
我正在阅读 ES6 的草稿,并在以下Object.prototype.toString
部分中注意到了这个注释:
历史上,此函数偶尔用于访问 [[Class]] 内部属性的字符串值,该属性在本规范的先前版本中用作各种内置对象的标称类型标记。toString 的这种定义保留了将其用作那些特定类型的内置对象的可靠测试的能力,但它没有为其他类型的内置或程序定义的对象提供可靠的类型测试机制。
通过阅读es-discuss 上的这个帖子,听起来好像在 ES6 草案[[Class]]
中被替换为[[NativeBrand]]
,以便他们可以将其指定为不可扩展(至少是Allen Wirfs-Brock 的想法)。
好奇,我在 FireFox 和 Chrome 中进行了快速测试(启用了实验性 JavaScript):
"WeakMap"
不是[[NativeBrand]]
ES6 草案中指定的 s 之一。但是,此测试"[object WeakMap]"
在两种浏览器上都返回。
所以我很困惑。我有几个问题。
1. Chrome 和 Firefox 的行为是否正确?
从阅读草稿的一种方式来看,它们听起来应该返回[object Object]
(所有这些都是相当新的,所以在这些浏览器的未来版本中看到这种变化我不会感到惊讶)。但是,我很难理解草案这一部分的意图,特别是因为有些地方带有"???"
.
有没有更热心关注es-discuss的人有相关信息?或者任何可以更好地理解草案语言的人?
2. 有替代品Object.prototype.toString
吗?
从上面引用的注释来看,它听起来好像Object.prototype.toString
是出于遗留原因而保留的,好像现在应该使用一些新的东西。尤其是节点中读取的部分"it does not provide a reliable type testing mechanism for other kinds of built-in ... objects"
。这是否意味着未来的内置插件无法使用此方法进行测试?
让我们用一个具体的例子。
如果我想确保从未知来源收到的对象是一个String
对象(实际构造的String
对象,而不是原始字符串),我可以这样做:
这让我知道它是否unknownObject
是一个String
对象,无论它是在什么框架中构建的。
我的问题是,这应该是我进入 ES6 所采用的方法吗?还是有替代方案?像Object.getNativeBrandOf
什么?
3. 既然[[NativeBrand]]
它似乎不包括未来类型的对象,那么如何测试这些对象?
这行得通吗?
...假设Symbol
是私有名称的最终名称。
我应该使用这个吗?
... 或者是其他东西?
我问的原因是我目前正在编写我希望能够在可能的一两年内尽可能轻松地转换到 ES6 的代码。如果有替代品Object.prototype.toString
,那么我可以将其填入并从那里继续。谢谢!
更新
benvie的回答为我提供了正确的术语来搜索和理解我的问题的答案。
我在 es-discuss 上找到了一封来自 Allen Wirfs-Brock 的关于此问题的电子邮件。
这是我发现的,对于其他提出相同问题的人:
1. Chrome 和 Firefox 的行为是否正确?
是的,为什么在下面解释。
2. 有替代品Object.prototype.toString
吗?
就像现在一样,在可能性的意义上会有几个“替代品” ,但在替代的意义上不会。
一个。 使用@@toStringTag
符号。但是,我的理解是Object.prototype.toString
仍然应该使用它。@@toStringTag
提供以允许扩展可以从Object.prototype.toString
. 如果您有一个想要添加自己的字符串标签的原型,您可以使用@@toStringTag
将值设置为任何字符串。Object.prototype.toString
将返回此值,除非此值是 ES5 内置函数之一,在这种情况下,字符串标记将带有 '~' 前缀。
湾。 在用户定义的对象上使用私有符号。我读过一封电子邮件,宣传这是对用户定义的对象进行相同类型检查的最佳方式。但是,我看不出这如何真正解决问题,因为我无法理解它如何成为跨框架解决方案,并且它不允许您检查 ES6 内置插件。
因此,即使有一些替代方案,Object.prototype.toString
现在坚持下去并继续前进也是一件好事,但有一个警告:
它可以确保你有一个内置的 ES5,例如String
,但确保你有一个内置的 ES6 并不是万无一失的,因为它们可以被欺骗@@toStringTag
。我不确定为什么会这样,我可能会遗漏一些东西,或者它可能会随着规范的发展而改变。
3. 既然[[NativeBrand]]
它似乎不包括未来类型的对象,那么如何测试这些对象?
如上所述,Object.prototype.toString
仍然可以在 ES6 内置程序上使用,但它不是万无一失的,因为任何有权访问该@@toStringTag
符号的人都可以欺骗它。但是,也许不应该有一个万无一失的方法,因为Object.prototype.toString(weakmap) == '[object WeakMap]'
这并不意味着weakmap instanceof WeakMap
(也不应该!)。weakmap
可能来自另一个框架,也可能是用户创建的类似弱图的对象。您真正知道的唯一一件事是它报告在功能上等同于 WeakMap。
似乎确实提出了一个问题,为什么您不能拥有一个用户定义的对象,该对象报告在功能上等同于 a String
or Array
(没有前缀"~"
)。
javascript - Harmony 模块 - 如何处理平台差异?
我对 node.js 的模块加载器以及新的和谐模块规范非常感兴趣。
总的来说,我喜欢这个规范,但有一个问题我不确定它是如何解决的。
如果想要构建一个跨平台的 JavaScript 库,有时需要在不同平台上使用不同的库来完成相同的工作。例如,node.js 中的 Buffer 模块在浏览器中不存在,因此必须编写一个抽象模块,根据平台加载不同的代码。
既然 Harmony 在执行任何代码之前解决了依赖关系,它怎么知道它只需要为一个平台加载代码,而不是为所有平台加载代码?
在浏览器中,我不想加载只在node.js中运行的代码,那么这个问题是怎么解决的呢?