document.all是函数还是对象?自定义JS类型检查应返回何值?
document.all:是对象,而非函数
document.all本质是一个类数组对象,它是早期IE专属的DOM元素集合API,后来虽被标准DOM方法替代,但多数浏览器为兼容旧代码仍保留了这个特性。
关于typeof document.all返回"undefined"的特殊情况
这是浏览器刻意做的兼容hack:早年很多代码用if (document.all)来判断是否是IE浏览器,而undefined在布尔语境下是假值,但实际document.all是存在的——浏览器通过让typeof返回"undefined",既保留了它作为对象的功能,又让旧的IE检测逻辑能继续生效。
类型检查函数的返回值选择
编写类型检查函数时,应该返回"object",原因如下:
- 它完全具备对象的核心行为:支持属性访问(如
document.all['header'])、拥有length属性,在支持它的浏览器中,document.all instanceof Object会返回true。 typeof的返回是特殊兼容场景的例外,不能反映它的实际类型。如果要做精准判断,可以在函数里单独处理这个特例:function getActualType(val) { if (val === document.all) { return 'object'; } return typeof val; }
内容的提问来源于stack exchange,提问作者Melab
相关产品推荐
相关产品推荐

