使用步骤
- 在左侧编写代码,或修改示例。
- 点「运行」或按 Ctrl+Enter(Mac 上是 ⌘+Enter),右侧显示控制台输出。
- 代码运行太久时点「停止」,或在右下角设置自动停止的时限。
参数说明
- 运行环境
- 浏览器的 Web Worker,支持最新的 JavaScript 语法(ES2024 及以后,取决于你的浏览器)、fetch、setTimeout、Intl、crypto 等,但没有 document 和 window。
- 控制台
- 支持 console.log、info、warn、error、debug、table、count、time/timeEnd,以及 %s、%d、%o 等占位符。对象会像 Node.js 一样展开显示。
- 顶层 await
- 代码整体放在一个 async 函数中执行,可以直接写 await。
输出的内容
输出里只会出现你发送到控制台的内容。最后一行的值不会像浏览器控制台那样显示,所以要用 console.log 包起来。输出遵循 Node.js 风格:数组和对象会展开,其中的字符串带引号,占位符 %s 和 %d 由后面的参数填充。
console.log([1, 2, 3].map((n) => n * n));
console.log('%s is %d years old', 'Ada', 36);
console.log({ name: 'Ada', tags: ['a', 'b'] });
const data = await fetch('https://example.com/').then((r) => r.status);
console.log(data);
前三行分别输出 [ 1, 4, 9 ]、Ada is 36 years old 和 { name: "Ada", tags: [ "a", "b" ] }。后两行需要联网,输出的是这次请求的 HTTP 状态。时限可以设为 5、10、30 或 60 秒,达到时限时运行会被终止,并给出提示。
常见问题
能用 import 引入 npm 包吗?
不能用 import 语句。可以用 await import('https://esm.sh/包名') 动态加载 ESM 格式的包,这需要联网。
写了死循环怎么办?
点「停止」立即结束,或等待达到时限后自动停止。每次运行都用新的 Worker,不会影响页面。
代码会上传吗?
不会。代码只在你的浏览器里执行;只有代码中自己发起的网络请求会访问对应的网址。
支持 TypeScript 吗?
目前只支持 JavaScript。TypeScript 的类型标注需要先去掉。
隐私说明
本工具完全在浏览器中运行,文件和文本都在你的设备上处理,不会上传到我们的服务器。