今天遇到一个问题,在IE9下运行类似以下代码时会报错:
window.console.log.apply(window.console, ['a', 'b', 'c']);
报错提示为:
对象不支持"apply"属性或方法。
查了一下,在Stack Overflow上查到了相关问题,地址为:
https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function
出现问题的原因是IE9或IE8浏览器中,console
不属于任何标准,而被认为是文档对象模型的一个扩展,因此console
像DOM对象
一样被当做宿主对象,它不继承自Object
,且它的方法也不继承自Function
。
既然console.log
没有继承自Function
,自然也就没有apply
方法了,因此调用console.log.apply
会报错。
此处调用console.log.apply
主要是为了传入参数数组,既然IE9中会报错,那就嗅探一下即可解决:
if (window.console.log.apply) {
window.console.log.apply(window.console, ['a', 'b', 'c']);
} else {
window.console.log(['a', 'b', 'c']);
}