array.of 是 es6 引入的静态数组创建方法,chrome 45+、firefox 25+、safari 9+、edge 12+ 原生支持,ie 全系列不支持,需按环境选择轻量垫片或 core-js 按需引入。

Array.of 是 ES6 引入的静态方法,用于安全创建含指定元素的数组,彻底避开 Array(5) 这类歧义(误建长度为 5 的空数组)。它本身不涉及复杂 API 或语法糖,但兼容性仍需分层处理——尤其在 IE 环境下。
哪些浏览器原生支持?
现代浏览器基本全覆盖:
- Chrome 45+、Firefox 25+、Safari 9+、Edge 12+ 均原生支持
- IE 完全不支持:IE6–IE11 都没有
Array.of - Android Browser 4.4 及更早版本、iOS Safari ≤ 8.1 也不支持
垫片方案要分清“语法”和“API”
Array.of 属于运行时 API,不是语法级特性(比如 const 或箭头函数),所以不需要 Babel 转译,只需运行时补全即可。但要注意:它依赖 Function.prototype.bind 和基础 Array 构造能力,在极旧环境(如 IE8)中可能需前置垫片。
- IE9–IE11:可直接用轻量垫片,例如:
if (!Array.of) { Array.of = function() { return Array.prototype.slice.call(arguments); }; } - IE8 及更早:需先确保
Array.prototype.slice可用(es5-shim 已提供),再注入上述逻辑 - 不推荐全局污染式 polyfill(如 core-js/stable),除非项目已统一使用 core-js@3 且启用
useBuiltIns: "usage"
按需引入 vs 手动实现
多数场景下,手动实现比引入整包更轻、更可控:
- 最简兼容写法:
Array.of = Array.of || function(...args) { return [].slice.call(arguments); }; - 注意:IE8 不支持 rest 参数,所以实际部署时应避免用
...args,改用arguments - 若已用
core-js,推荐按需导入:import 'core-js/stable/array/of';,体积约 300B,无副作用 - 避免混用:不要同时加载 es-shims 和 core-js 的 array/of,可能造成重复定义
构建工具里的自动处理建议
如果你用 Webpack + Babel,@babel/preset-env 在配置 targets: { ie: "11" } 后,默认不会自动注入 Array.of 垫片——因为它属于“非破坏性缺失”,需显式启用:
- 开启
useBuiltIns: "usage",并在入口文件 import 'core-js/stable' - 或更精准地:在用到
Array.of的模块顶部加import 'core-js/stable/array/of'; - 验证方式:构建后检查 bundle 是否含
Array.of=...相关代码,而非仅靠 Browserslist 推断
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











