{?}和{#}之间究竟有什么区别?
–
经过一点测试后,列出所有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
–
它们之间真的有什么区别吗?
解决方法
#和?之间存在差异,尽管它有些微妙,并且在您的示例中没有显示出来.
? (存在):检查给定密钥的真实性.如果键是真的,执行正文,否则执行:else正文(如果有的话).
#(section):检查给定密钥的真实性.如果键是真实的,请将上下文设置为键,然后执行正文.如果上下文是数组,则对数组中的每个元素执行一次body.如果密钥不真实,请不要更改上下文,并执行:else主体(如果存在).
所以,如果您的模板看起来像这样:
模板:
{?values} {?.}true{:else}false{/.} {/values} {~n} {#values} {#.}true{:else}false{/.} {/values}
然后你的输出将是:
true falsefalsefalsefalsefalsefalsetruetruetruetruetruetruetrue
第一行检查值是否存在,但不更改上下文.第二行检查当前上下文(在本例中是根上下文)是否存在,并且它打印为true.既然?不会进入上下文并循环遍历数组,true只打印一次.