Node.js 20.4.1中structuredClone()未保留Date类型问题咨询
structuredClone克隆Date后instanceof Date返回false的问题分析
structuredClone() 本身规范支持克隆 Date 类型对象,克隆后的对象理应保持 Date 实例身份。你遇到的问题并非操作错误,而是Node.js 20.4.1版本的已知兼容性问题。
问题原因
Node.js 20.4.1中存在structuredClone()的实现bug,克隆Date对象后会导致其原型链异常,进而使instanceof Date返回false。但实际上克隆后的对象仍具备Date的全部方法和属性,比如调用cloneObj.myDate.toISOString()依然能正常输出正确结果。
解决方案
- 升级Node.js版本:将版本升级至20.5.0及以上,官方已修复该问题,升级后
instanceof Date会正常返回true。 - 改用可靠的类型判断方式:如果暂时无法升级,可通过
Object.prototype.toString来判断类型,避免原型链影响:function isDate(target) { return Object.prototype.toString.call(target) === '[object Date]'; } console.log(isDate(cloneObj.myDate)); // 输出 true - 手动克隆Date属性:针对仅包含
Date属性的简单对象,也可以手动实现克隆逻辑:const cloneObj = { ...originalObj, myDate: new Date(originalObj.myDate.getTime()) };
内容的提问来源于stack exchange,提问作者Diogo Domanski
相关产品推荐
相关产品推荐

