如何在Sass中创建空映射?

如何在Sass中创建空映射?,sass,sass-maps,Sass,Sass Maps,下面的代码将在变量$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)}"; } WARNIN

下面的代码将在变量
$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: ();
根据地图上的说明,空列表和地图都是使用
()
创建的。因此,上面的代码是一个完全有效的空映射,但是当测试该类型时,控制台将告诉您它是一个列表(请注意,它的类型仍然是map或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
}

我明白。我不想向它添加任何内容,但我确实想通过
map-has-key()
传递它,如果类型是
list
,这是一个问题。即使控制台将空映射报告为列表,它仍然被视为空映射或空列表。你可以通过
map-has-key()。。。是的,似乎是这样。我发誓我之前遇到了一个错误。如果这个解决方案对你有效,请接受它作为正确答案。
@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
}