less 没有原生 map 类型,所谓 map-get() 来自第三方库或手写 mixin;实际可用嵌套变量 + extract() 模拟键值读取,但无法按 key 名直接访问;推荐用构建工具将 json 配置转为 less 变量,所有“map”操作均在编译期完成,非运行时动态行为。

Less 中没有原生 Map 类型,别被名字误导
Less 本身不支持 JavaScript 风格的 Map 对象,也没有 get / set / has 这类方法。所谓“像操作 JSON 一样管理 CSS 配置参数”,实际是用 Less 的 @variables + map 命名约定 + 自定义函数模拟键值结构。如果你在文档或社区里看到 map-get(),它来自第三方 mixin 库(如 less-plugin-functions)或手写的 mixin,不是 Less 内置能力。
用嵌套变量 + extract() 模拟基础键值读取
Less 原生最接近“Map”的写法是定义嵌套变量,再用 extract() 提取字段。比如配置主题色:
@theme: ( primary: #007bff, success: #28a745, radius: 4px );
读取时不能写 @theme[primary](语法错误),必须用:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
-
extract(@theme, 1)→ 获取第一个值(#007bff),但无法按 key 名取值 - 更可靠的方式是拆成独立变量:
@theme-primary: #007bff;,靠命名空间模拟层级 - 若坚持用元组形式,需配合自定义 mixin,例如:
.map-get(@map, @key) { ... },内部用when条件匹配@key字符串
真实项目中推荐:用 @plugin 引入 less-vars-to-js 或直接导出 JSON
想真正“像操作 JSON 一样”,与其在 Less 里硬搞 Map 语义,不如让配置源头统一。常见做法:
- 维护一个
theme.config.json,含{"primary": "#007bff", "radius": "4px"} - 用构建工具(如 Webpack 的
less-vars-to-js插件)把 JSON 转为 Less 变量文件:@primary: #007bff; - 或反过来:用 PostCSS/JS 脚本读取 Less 变量,生成运行时可访问的 JS 对象
- 注意:Less 编译期无法动态读取外部 JSON 文件,所有“联动”都发生在构建阶段
容易踩的坑:混淆编译时与运行时、误信过时的 mixin 片段
网上很多“Less Map 教程”贴出的 map-get() 代码,依赖已停止维护的 less-plugin-functions(Less 3.5+ 不兼容)。实际测试会报错:ReferenceError: map-get is not defined。另外几个关键限制:
- Less 变量不支持运行时计算 key 名,
@key: "primary"; @theme-@{key}是非法语法 - 嵌套变量无法被
each()遍历(Less 无原生循环结构) - 所有“Map 操作”本质是字符串匹配或索引提取,没有哈希查找性能,大数据量会拖慢编译
真要动态查配置,最终还是得交给 JS —— Less 只负责把变量静态注入,别让它承担数据结构职责。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










