setup
基础设置和功能支持
export const VERSION = '1.13.7';
/**
* 获取当前环境的全局对象
*
* @description 这段代码尝试跨不同 JavaScript 环境获取全局对象
* @returns {Object} 全局对象
*/
export const root =
/**
* 浏览器环境 (window)
* - 针对浏览器环境(如 Web Worker)
* - 检查 self 是否为对象
* - 确保 self.self 指向 self 本身
* - 如果条件成立,返回 self(通常是 window)
*/
(typeof self == 'object' && self.self === self && self) ||
/**
* Node.js 环境 (global)
* - 针对 Node.js 环境
* - 检查 global 是否为对象
* - 确保 global.global 指向 global 本身
* - 如果条件成立,返回 global
*/
(typeof global == 'object' && global.global === global && global) ||
/**
* 通过 Function 构造器获取 this
* - 使用 Function 构造器动态返回 this
* - 这是一个兜底方案,尝试获取全局 this
* - 在严格模式下可能返回 undefined
*/
Function('return this')() ||
// 最后的 {} 是最终的兜底方案。如果前面所有方法都失败,则返回一个空对象
{};
/**
* 创建原型对象的引用别名
*
* @description
* - 缓存 Array 和 Object 的原型对象
* - 减少每次使用时查找原型链的开销
* - 提供更简洁的代码写法
*/
export const ArrayProto = Array.prototype, ObjProto = Object.prototype;
/**
* Symbol 原型的安全处理
*
* @description
* - typeof Symbol !== 'undefined' 检查当前环境是否支持 Symbol
* - 如果支持,返回 Symbol.prototype
* - 如果不支持(如旧版浏览器或不完全的 ES6 环境),返回 null
*/
export const SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
/**
* 导出常用的数组和对象原型方法
*
* @description
* - 直接引用并导出常用的原型方法
* - 提供快速访问和使用
* - 减少方法调用的查找开销
*/
export const push = ArrayProto.push,
slice = ArrayProto.slice,
toString = ObjProto.toString,
hasOwnProperty = ObjProto.hasOwnProperty;
/**
* 检测对象缓冲区相关特性的环境支持
*
* @description
* - 判断当前环境是否支持 ArrayBuffer
* - 判断当前环境是否支持 DataView
* - 用于跨环境的兼容性检查
*/
export const supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
supportsDataView = typeof DataView !== 'undefined';
/**
* 导出原生对象和数组的静态方法
*
* @description
* - 直接引用原生的数组和对象方法
* - 提供 ArrayBuffer 视图的安全检测
* - 减少方法查找开销
*/
export const nativeIsArray = Array.isArray,
nativeKeys = Object.keys,
nativeCreate = Object.create,
nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
/**
* 导出原生的数值判断函数
*
* @description
* - 直接引用 isNaN 和 isFinite 全局函数
* - 通过下划线前缀创建别名
* - 提供数值的特殊状态检测
*/
export const _isNaN = isNaN,
_isFinite = isFinite;
/**
* 检测对象属性枚举的兼容性问题
*
* @description
* - 检查某些属性在不同浏览器中的枚举行为
* - 记录一些历史上可能存在枚举问题的标准属性
*/
// 检测属性枚举的浏览器兼容性问题
export const hasEnumBug = !{ toString: null }.propertyIsEnumerable('toString');
// 可能存在枚举问题的非枚举属性列表
export const nonEnumerableProps = [
'valueOf',
'isPrototypeOf',
'toString',
'propertyIsEnumerable',
'hasOwnProperty',
'toLocaleString'
];
/**
* JavaScript 数组的最大可用索引值。
* 它等于 `2^53 - 1`,即 JavaScript 中的最大安全整数。
* 通常用于验证或限制类数组结构的索引范围。
*
* @constant {number} MAX_ARRAY_INDEX
* @default 9007199254740991
*/
export const MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;最后更新于