细说 expando 的来源
这篇讲的是 JavaScript 中一个很少被正式提及、却又无处不在的术语——expando 的身世。作者从大家耳熟能详的“不要随意给 DOM 元素添加 expando 属性”这条忠告切入,试图追溯这个词的源头。 文章梳理了 expando 与早期 Internet Explorer 浏览器的渊源。它最初是 IE 提供的一种非标准方式,允许开发者通过简单的赋值为任何 JavaScript 对象(包括 DOM 元素)动态添加任意属性,这些属性会直接“扩展”该对象。在标准 DOM 属性方法普及前,这曾是实现某些交互效果的常见手段。 关键在于,这些“扩展”属性不会出现在标准的 `hasOwnProperty` 检查中,且可能在 DOM 序列化或垃圾回收时引发意料之外的副作用,这也是那条“忠告”的由来。随着 Web 标准演进,现代浏览器已能良好处理这类情况,但了解其历史能帮助我们更深刻地理解 JavaScript 对象模型的动态性以及早期浏览器兼容性问题的缩影。 对于前端开发者而言,明白 expando 的来龙去脉,不仅能解开许多历史代码的疑惑,也能更审慎地对待“动态添加属性”这一模式,知晓其背后的潜在影响。