4

下面的代码将在变量中创建一个空映射$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
4

2 回答 2

2

可以通过非常简单的方式创建空地图:

$emptyMap: ();

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

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

一旦你在地图上添加了一些东西,控制台就会告诉你这是一张地图。

$map: ();
$newMap: map-merge($map, (1: test));
@warn "#{type-of($newMap)}";
// Warning: map
于 2018-09-28T18:00:49.413 回答
0

没有更好的本地方法可以做到这一点,但你可以让它更短。

$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 演示

于 2018-09-28T18:18:32.087 回答