最稳妥做法是用const声明冻结的单层对象统一承载原始类型操作,方法为纯函数、语义清晰、不嵌套不缩写、不修改原值、不依赖外部状态。

原始类型操作(如字符串处理、数字格式化、布尔判断辅助等)不该直接挂到全局,也不该散落在各处。最稳妥的做法,是用一个轻量、不可变、语义清晰的对象字面量来统一承载——它不是传统嵌套命名空间,而是“功能分组型命名空间”,聚焦原始值的转换与校验。
用 const 声明单一层级对象
避免动态创建或层层赋值。直接用 const 定义一个冻结结构的对象,既防误改,也明确边界:
- 所有方法都定义在顶层属性上,不嵌套子命名空间(比如不写
Str.trimLeft,而用Str.trimStart) - 名称直指用途:如
Num.isInteger、Str.isEmpty、Bool.toBoolean,不缩写、不模糊 - 不暴露私有工具函数;内部逻辑可封装在闭包中,但对外只暴露纯函数接口
方法必须是纯函数且无副作用
原始类型操作的核心约束是“输入确定,输出唯一,不改原值”。命名空间里的每个方法都应满足:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 接收原始值(string/number/boolean/null/undefined)或其包装对象,返回新值,绝不修改入参
- 不读取或依赖外部状态(如 localStorage、全局变量、Date.now())
- 对相同输入始终返回相同输出,便于测试和缓存
- 例如:
Str.capitalize("hello") → "Hello",而非Str.capitalize(str)还顺带往控制台打日志
按类型分组,但不强制类型前缀
结构上可按原始类型组织,但命名不必机械重复类型名:
- 推荐方式:
Str.padStart、Num.roundTo、Bool.from - 避免冗余:
StringHelper.uppercase或NumberUtils.clamp—— “Helper”“Utils”无信息量,且易引发歧义 - 允许跨类型通用方法,如
is.nil、is.empty,但需保证行为一致、文档明确
导出与复用要简洁自然
在模块环境中,直接默认导出该对象即可;非模块环境(如旧浏览器脚本),用 IIFE 包裹并挂载到最小必要全局标识符下:
- ESM 中:
export default { Str, Num, Bool }; - UMD 场景:
const Core = { Str, Num, Bool }; typeof define === 'function' && define.amd ? define(() => Core) : typeof module !== 'undefined' ? module.exports = Core : (window.Core = Core); - 不拼接 window 属性链(如
window.MyLib.Types.Str),那会回到传统命名空间的老问题
不复杂但容易忽略:原始类型操作的命名空间,本质是“函数集合的语义容器”,不是架构层抽象。越简单、越专注、越可预测,就越可靠。

















