跳到正文
马克工具箱

在线运行 JavaScript

粘贴或编写 JavaScript,点运行即可看到 console.log、warn、error 的输出,适合验证代码片段、练习算法或调试一段逻辑。支持顶层 await,代码在独立的 Worker 里执行,写出死循环也不会卡住页面。

在浏览器本地运行,输入的内容和文件都不会上传

Ctrl+Enter / ⌘+Enter

控制台

console.log 的输出会显示在这里。

代码在独立的 Worker 中运行:没有 DOM(document、window),但可以用 fetch、定时器、JSON、Intl 等内置功能。

使用步骤

  1. 在左侧编写代码,或修改示例。
  2. 点「运行」或按 Ctrl+Enter(Mac 上是 ⌘+Enter),右侧显示控制台输出。
  3. 代码运行太久时点「停止」,或在右下角设置自动停止的时限。

参数说明

运行环境
浏览器的 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 的类型标注需要先去掉。

隐私说明

本工具完全在浏览器中运行,文件和文本都在你的设备上处理,不会上传到我们的服务器。

相关工具