哪些浏览器和版本支持将常见的类数组对象直接传递到fn.apply()

Which browsers and versions support directly passing common array-like objects to fn.apply()

本文关键字:fn apply 对象 数组 版本 浏览器 支持 常见      更新时间:2024-03-30

哪些浏览器和版本(Firefox、IE、Chrome、Safari、iOS Safari和Android)支持以下JavaScript功能apply()功能:

function foo(){
  alert('foo!');
};
foo.apply(null, arguments);
// OR
foo.apply(null, document.querySelectorAll('div'));

添加澄清:

在过去,许多浏览器都需要以下功能:

fn.apply(null, Array.prototype.slice.call(arguments, 0));

我想知道哪些浏览器和版本会接受这个:

fn.apply(this, arguments);

事实证明(基于Blue Skyes在上面的问题评论中提供的信息),在几乎所有现代浏览器中都很支持将类似数组的对象arguments作为Function.apply()的第二个参数。

不幸的是,对将其他常见的、类似数组的DOM对象(如NodeListHTMLCollection等)传递给Function.apply()的支持参差不齐。以下是一批针对各种桌面/移动浏览器的NodeList传递支持(querySelectorAll()的输出对象)的测试:http://www.browserstack.com/screenshots/e83f68eb169206f5969b6b2a2d3267bd18c520cc(绿色=支持,红色=不支持)

传递大多数类似数组的对象的大致兼容性范围是:Firefox 4+、Chrome 17+、IE9+、Safari 5.1+(iPhone 5+/iPad 3+)和Android 2.4+。