如何在 Sass 中创建空地图?

How can an empty Map be created in Sass?

以下代码将在变量 $test 中创建一个空映射,但是否有正确的方法来完成此操作?这似乎太老套了,不是获得空地图的最佳方式。

$test: map-remove((default:null), 'default');

@if type-of($test) != map {
    @warn "This is not a map: #{inspect($test)}";
}
@else {
    @warn "This is a map: #{inspect($test)}";
}

WARNING: This is a map: ()
         on line 7 of app/styles/functions/map.scss

可以用一种非常简单的方式创建空地图:

$emptyMap: ();

根据地图上的 official documentation,空列表和地图都是使用 () 创建的。所以上面的代码是一个完全有效的空映射,但是在测试类型时,控制台会告诉你它是一个列表(注意它的类型仍然是映射或列表)。

$map: ();
@warn "#{type-of($map)}";
// Warning: list

向地图添加内容后,控制台会告诉您这是一张地图。

$map: ();
$newMap: map-merge($map, (1: test));
@warn "#{type-of($newMap)}";
// Warning: map

没有更好的本机方法可以做到这一点,但您可以缩短它。

$map: map-remove((x:x), x);

.foo {
  output: type-of($map); // map
}

另一个解决方案是使用自定义函数。

@function empty-map($x: x) {
  @return map-remove(($x:$x), $x);
}

$map2: empty-map();
$map3: empty-map();

.foo {
  output: type-of($map2); // map
  output: type-of($map3); // map
}

SassMeister demo