哈希
在 0.39.0
版本中,Stylus 引入了哈希对象。
定义
你可以使用大括号和冒号来分隔键和值来定义哈希:
stylus
foo = {
bar: baz,
baz: raz
}
foo = {
bar: baz,
baz: raz
}
键应该是正确的标识符或字符串:
stylus
foo = {
bar: baz,
'baz': raz,
'0': raz
}
foo = {
bar: baz,
'baz': raz,
'0': raz
}
当你已经有一个哈希时,可以使用方括号和字符串内部来设置其值:
stylus
foo = {}
foo['bar'] = baz
foo['baz'] = raz
foo = {}
foo['bar'] = baz
foo['baz'] = raz
请注意,虽然你不能在大括号定义中使用变量或插值,但可以在方括号中使用变量:
stylus
foo = {}
bar = 'baz'
foo[bar] = raz
foo.baz
// => raz
foo = {}
bar = 'baz'
foo[bar] = raz
foo.baz
// => raz
匿名哈希
我们可以为列表创建匿名哈希对象,一种没有变量名的对象。
stylus
list = foo {int: 1, str: '1'} {node: a-node, color: #32E}
list[0]
// => foo
type(list[0])
// => 'ident'
type(list[1])
// => 'object'
list[1].int
// => 1
list[2].color
// => #32E
list = foo {int: 1, str: '1'} {node: a-node, color: #32E}
list[0]
// => foo
type(list[0])
// => 'ident'
type(list[1])
// => 'object'
list[1].int
// => 1
list[2].color
// => #32E
要访问其值,我们可以同时使用方括号语法(['str']
)和点语法(.
)。方括号语法适合编程,而点语法更具可读性,类似 JSON 语法。它也很好地与迭代和条件语句配合使用。
获取值
要从哈希中检索值,你可以对标识符使用点:
stylus
foo = { bar: "baz" }
foo.bar
// => "baz"
foo = { bar: "baz" }
foo.bar
// => "baz"
或对任何内容使用带字符串的方括号:
stylus
foo = { "%": 10 }
baz = "%"
foo[baz]
// => 10
foo = { "%": 10 }
baz = "%"
foo[baz]
// => 10
你可以使用任何你想要的组合:
stylus
foo = {
bar: {
baz: {
raz: 10px
}
}
}
qux = "raz"
foo["bar"].baz[qux]
// => 10px
foo = {
bar: {
baz: {
raz: 10px
}
}
}
qux = "raz"
foo["bar"].baz[qux]
// => 10px
插值
在插值中使用的哈希将输出哈希的内容作为 CSS(尽管几乎没有 Stylus 特性):
stylus
foo = {
width: 10px,
height: 20px,
'&:hover': {
padding: 0
}
}
.bar
{foo}
// => .bar {
// width: 10px;
// height: 20px;
// }
// .bar:hover {
// padding: 0;
// }
foo = {
width: 10px,
height: 20px,
'&:hover': {
padding: 0
}
}
.bar
{foo}
// => .bar {
// width: 10px;
// height: 20px;
// }
// .bar:hover {
// padding: 0;
// }
其他内容
你可以对哈希使用其他普通的 Stylus 功能,如 length()
:
stylus
foo = { bar: 'a', baz: 'b' }
length(foo)
// => 2
foo = { bar: 'a', baz: 'b' }
length(foo)
// => 2
你可以使用可选的键参数遍历哈希:
stylus
foo = { width: 10px, height: 20px }
for key, value in foo
{key}: value
// => width: 10px;
// height: 20px;
foo = { width: 10px, height: 20px }
for key, value in foo
{key}: value
// => width: 10px;
// height: 20px;
你可以使用 in
检查哈希中是否存在键:
stylus
foo = { bar: 10px}
bar in foo
// => true
baz in foo
// => false
foo = { bar: 10px}
bar in foo
// => true
baz in foo
// => false
你可以使用相应的内置函数获取哈希的键或值:
stylus
foo = { bar: 'a', baz: 'b' }
keys(foo)
// => 'bar' 'baz'
values(foo)
// => 'a' 'b'
foo = { bar: 'a', baz: 'b' }
keys(foo)
// => 'bar' 'baz'
values(foo)
// => 'a' 'b'
你可以使用 remove
内置函数从哈希中删除一个键:
stylus
obj = { foo: 1, bar: 2 }
remove(obj, 'foo')
// => {"bar":"(2)"}
obj = { foo: 1, bar: 2 }
remove(obj, 'foo')
// => {"bar":"(2)"}
你可以使用 merge
(别名为 extend
)来合并哈希:
stylus
obj = {
foo: 'foo'
bar: 'bar'
}
obj2 = {
baz: 'baz'
}
merge(obj, obj2)
// => {"foo":"('foo')","bar":"('bar')","baz":"('baz')"}
obj = {
foo: 'foo'
bar: 'bar'
}
obj2 = {
baz: 'baz'
}
merge(obj, obj2)
// => {"foo":"('foo')","bar":"('bar')","baz":"('baz')"}