unquote()仅剥除字符串最外层单/双引号,不处理内部引号或转义,非解码器;用于动态拼接css标识符等极少数场景,伪元素content中误用会导致图标失效。

unquote() 只能剥掉字符串最外层的一对引号,不管单双,也不碰中间的引号。它不是“清洗函数”,更不是“解码器”——用错场景反而会让 CSS 语法出问题。
unquote() 能做什么、不能做什么
它只做一件事:如果参数是带首尾引号的字符串("foo" 或 'bar'),就去掉那一对;否则原样返回。
-
unquote("Hello")→Hello(双引号被剥) -
unquote('I'm')→I'm(单引号被剥,中间撇号保留) -
unquote("'quoted'")→'quoted'(只剥最外层单引号,里面那对还在) -
unquote(e901)→e901(无引号输入,直接返回) -
unquote("url('data:image/svg+xml,')")→url('data:image/svg+xml,')(内部引号完好,但整个值可能因缺少转义而失效)
伪元素 content 中处理图标 Unicode 的硬约束
浏览器要求 content 值必须是无引号 + 开头带反斜杠的原始 token,比如 \e901,不是 "e901",也不是 "\e901"(后者会变成字面量 \e901)。
- ✅ 正确变量定义:
$icon-home: \e901;(不加引号、不加额外反斜杠) - ✅ 正确使用:
content: #{$icon-home};(插值,不经过unquote()) - ❌ 错误写法:
$icon-home: "\e901";→unquote($icon-home)输出\e901,但 Sass 编译时已把"\e901"解析为字符串字面量,反斜杠被吃掉,最终生成content: e901; - ❌ 更隐蔽的错误:
$icon-home: "e901"; unquote($icon-home)→e901(缺反斜杠,纯文本,图标不显示)
什么时候真该用 unquote()?
典型场景极少,集中在需要动态拼接 CSS 标识符且必须避开引号解析的边缘 case,比如自定义属性名、CSS 自定义选择器或某些 PostCSS 插件配合场景。
- 当变量存的是带引号的标识符字符串,又必须在非
content场合输出无引号形式时,才考虑unquote() - 例如:
$custom-prop: "--my-var"; .box { #{$custom-prop}: 1; }不行,得写成#{unquote($custom-prop)}: 1; - 但注意:
unquote("--my-var")和--my-var效果一样,多数时候直接写变量更安全 - 别为了“看起来干净”而套
unquote()—— 它不改变语义,只改表层格式
unquote() 是编译期函数,它无法修复源头错误;而 #{} 插值才是控制输出形态的主力。多数所谓“要用 unquote()”的需求,其实只是没搞清变量该不该加引号、该不该带反斜杠。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











