{?}
和{#}
之间究竟有什么区别?
-
经过一点测试后,列出所有truthy/falsy values for {?}
,并将它们与{#}
进行比较:
上下文:
{
values: [
// false
'',
"",
false,
null,
undefined,
[],
// true
0,
"0",
"null",
"undefined",
"false",
{},
{a: 'a'}
]
}
模板:
{#values}
{?.}true{:else}false{/.}
{/values}
{~n}
{#values}
{#.}true{:else}false{/.}
{/values}
它输出的结果完全相同:
falsefalsefalsefalsefalsefalsetruetruetruetruetruetruetrue
falsefalsefalsefalsefalsefalsetruetruetruetruetruetruetrue
-
它们之间真的有什么区别吗?
答案 0 :(得分:11)
#
和?
之间存在差异,但它有些微妙,并且在您的示例中没有显示出来。
?
(存在):检查给定密钥的真实性。如果密钥是真实的,请执行正文,否则执行:else
正文(如果有的话)。
#
(部分):检查给定密钥的真实性。如果键是真实的,请将上下文设置为键,然后执行正文。如果上下文是数组,则对数组中的每个元素执行一次body。如果密钥不真实,请不要更改上下文,并执行:else
正文(如果存在)。
所以,如果你的模板看起来像这样:
<强>模板:强>
{?values}
{?.}true{:else}false{/.}
{/values}
{~n}
{#values}
{#.}true{:else}false{/.}
{/values}
然后你的输出将是:
true
falsefalsefalsefalsefalsefalsetruetruetruetruetruetruetrue
第一行检查values
是否存在,但不会更改上下文。第二行检查当前上下文(在本例中是根上下文)是否存在,并打印true
。由于?
没有进入上下文并循环遍历数组,因此true
仅打印一次。