问题标签 [ecmascript-2018]

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.

0 投票
1 回答
320 浏览

javascript - 询问不能直接转换为手动实现的异步迭代的异步生成器的示例

异步生成器使用内部队列来处理同步的nextthrowreturn方法调用。

我试图构建一种情况,该队列对于迭代本身的成功是必需的。因此,我正在寻找一些情况,即手动实现异步迭代接口而无需自定义重新实现队列是不够的。

下面是一个例子,但不是很好,因为没有保持一般的时间一致性,但迭代结果在每一步都是正确的:

可以说,如果没有适当的队列,迭代概念本身就会丢失。那是因为活动的并行下一个调用。

无论如何,我想找一些例子,也是一些琐碎的例子,它们清楚地表明异步生成器是创建格式良好的异步迭代的更好方法,而不是手动实现异步迭代接口

- - - 编辑 - - -

让我们谈谈一个改进的情况:

这里的done分辨率是完全异步的。从异步迭代的角度来看,代码是错误的,因为每个next调用都应该被强制到await前一个的结果,以知道它是否是最后一次有效的迭代。在这种情况下,当前next应该什么都不做,立即返回Promise.resolve({done:true, value:undefined})。这要归功于同步next调用队列。

但在实践中,越界、ait.next()重复调用的主要风险是一些无用的 AJAX 请求。不要误会,我不是说我们可以视而不见。关键是异步迭代本身的每一步都不会被破坏。

我希望看到一种情况,不是太不切实际,如果所有下一个调用都没有排队,迭代本身可能会在每一步受到损害。

0 投票
1 回答
586 浏览

javascript - 方括号前的分号

谁能告诉我为什么纱线格式在我的方括号前添加一个分号。没有它,纱线构建失败..

0 投票
3 回答
375 浏览

javascript - 返回值中的传播运算符错误,解析错误

尝试直接返回包含扩展运算符的项目时,出现解析错误。如果我在返回它之前将它分配给一个对象,则没有解析错误。我想知道为什么。

当我看到指向扩展运算符的解析错误时,我首先怀疑没有 ES2018,但通过一些实验,我发现扩展运算符正在工作。

第一个 WorkoutSet 是这样定义的。 workoutSets: [ { id: 0, group: 0, repeat: 0, dist: 25, rest: 20, speed: "Easy", total: 0, notes: "" } ]

这显示了一个解析错误点... this.state.workoutSets.map( item => { ...item, repeat: e.target.value } )})

这成功了: this.state.workoutSets.map( item => item = { ...item, repeat: e.target.value } )})

这也成功了: this.state.workoutSets.map( item => item.group === 0 ? { ...item, repeat: e.target.value} : item)})

我只是好奇为什么第一个例子失败了。

0 投票
3 回答
607 浏览

javascript - 阻止每个网站域解析所有或部分 DOM 内容

我创建了一个小的命令式香草 JavaScript 脚本来阻止分散注意力的新闻网站,我觉得这是一种类似上瘾的行为:

该脚本基本上可以工作(弹出窗口接管 DOM),但我的问题是它只在所有 DOM 内容都被解析和呈现后才阻止站点,而我有兴趣阻止解析。

虽然收听load事件为时已晚,但收听较早的DOMContentLoaded事件可能比收听load或收听更好的结果setTimeout(),因为阻塞可能在内容被解析后立即发生,而不是呈现。
然而,我需要一种方法来完全阻止解析相关网站的任何网页(或者,在解析第一个 DOM HTML 元素节点后阻止任何进一步的解析)。

我试过的

根据评论,我在 Google Chrome 中尝试过:

window.stop();我不记得有任何重大变化
window.close();它仅在 devtool 控制台
window.location.replace("about:blank");中对我有用 它仅在load事件完成后才对我有用,而不是在解析开始时

我的问题

我需要的操作是否可以使用最新的 ECMAScript (10) 进行,如果可以,应该使用什么命令?


Sxribe 更新:

亲爱的 Sxribe,我使用以下代码创建了以下文件。
该文件确实由 Tampermonkey 加载(使用正确的@match列表),但在加载匹配的网站时我没有看到浏览器的变化(这些网站没有被阻止并正常加载)。

文件中的代码

Tampermonkey 中的文件调用

0 投票
2 回答
44 浏览

javascript - ES2018 Async Generator的简明部分应用?

我定义了一个异步生成器函数,并想创建第二个异步生成器函数,它是第一个函数的部分应用程序。例如,这有效:

我的问题是:有没有更简洁的定义方式fn2

0 投票
1 回答
201 浏览

javascript - 不能在生成器中使用 'yield' 作为标识符

在编写异步生成器函数时,我注意到以下构造导致 a SyntaxError

即使颠倒上下文关键字的顺序是完全可以接受的:

UnaryExpression仔细阅读错误后,我能够通过将括号括在括号内来更正语法,AwaitExpression以避免将令牌解析yield为标识符而不是上下文关键字:

但这引出了一个问题,ECMAScript 2018中涉及哪些特定的静态语义导致yield在这种情况下被解析为标识符,await而不需要特殊处理?

0 投票
3 回答
704 浏览

javascript - 用 string.replace(regex, value) 替换变量名

尝试做我认为是相当简单的字符串替换,但结果比我想象的要复杂。

如果我有一个字符串

为清楚起见,我正在解析的“公式”是用户提供的,并且可以包含用户可以提出的任何一系列变量名称和运算符 (+*/-) 和括号。我需要做的是首先用数字替换变量,然后评估结果表达式。,

我正在寻找的是如何使用 string.replace 函数替换所有出现的单词months,比如“12”。

所以希望函数的输出是

似乎我需要一个正则表达式来避免替换像“startmonths”这样的字符串,我可能认为它实际上不可能在 javascript 正则表达式中执行,因为现代浏览器很少支持“lookbehinds”。

我尝试使用 [^A-Za-z9-9_](months)(?:[^A-Za-z0-9_]) ,但它捕获了“月”之前和之后的字符,所以我不能将它用作 string.replace 的参数。

是否有一些解决方法,或者我是否必须忘记替换功能并使用查找和拼接等“手动”完成?

0 投票
1 回答
62 浏览

javascript - 对象传播语法永远不会抛出错误吗?

我注意到 Object Spread 语法对于它可以接受哪些类型的值非常宽容:

在对象字面量中传播时,是否存在无效的类型、类或值(即引发任何类型的错误)?当然,不包括未捕获的拒绝承诺。

0 投票
1 回答
42 浏览

javascript - 如何创建新对象作为默认 arg 对象

所以我们可能在减速器中有这个:

有没有办法为每次调用 userReducer 获取一个 defaultState 对象?像这样的东西:

这在JS中可能吗?它可能对 Redux 减速器没有用,但总的来说我很好奇。

0 投票
1 回答
164 浏览

jasmine - 使用 ES2018 代码对 jasmine 的代码覆盖率?

我刚开始在我的 nodejs 代码中使用 async/await,并注意到我的代码覆盖工具无法处理它,对于任何带有异步的行,我都会收到“致命错误:意外令牌”。我使用 karma 和 jasmine 作为我的单元测试框架,并使用 grunt-jasmine-node-coverage 作为代码覆盖率。我检查并发现 grunt-jasmine-node-coverage 多年来没有更新。我寻找了一个更现代的代码覆盖率库,但找不到在过去一年中更新过的任何内容。我可以只使用 npm 而不是 grunt 来运行我的任务,我知道我在这方面落后了,但我找不到任何最新的代码覆盖框架,我认为这会有所作为。

有谁知道适用于 ES2018 语法的 JS 代码的代码覆盖框架?