You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何new File()在jsdom返回空对象,Chrome控制台却为有效File?

问题原因及解决办法

核心原因:环境差异导致的File对象表现不同

  • Chrome浏览器原生完全支持File API,控制台会特殊格式化显示File对象的所有可访问属性(比如name、type、size),所以你能看到完整的File实例信息。
  • TypeScript Playground的运行环境(或你的测试代码环境,比如Node.js)要么没有原生实现浏览器的File API,要么实现方式中File对象的核心属性是不可枚举的:直接打印对象时,不可枚举属性不会被输出,看起来像空对象,但实际上对象的属性和方法是存在的。

验证方式

你可以在TS Playground里尝试访问File对象的具体属性,而不是直接打印整个对象:

const file = new File(['(⌐□_□)'], 'chucknorris.png', { type: 'image/png' });
console.log(file.name); // 输出 "chucknorris.png"
console.log(file.type); // 输出 "image/png"
console.log(file.size); // 输出对应数据的大小

这样就能确认对象其实是有效的,只是打印方式导致显示为空。

适配非浏览器环境的方案

如果你的测试代码运行在Node.js环境(TS Playground默认可能用的是Node模拟环境),原生Node.js并不支持浏览器的File构造函数,通常需要:

  • 使用Buffer或Blob结合自定义属性模拟File对象;
  • 引入第三方库来提供完整的File API实现;
  • 用jsdom等工具模拟浏览器环境,让代码能在Node中运行浏览器API。

内容的提问来源于stack exchange,提问作者Bartosz Ciach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:15:54