灰尘:逻辑部分{?}和{#}之间的差异

abe*_*ier 7 dust.js

{?}和之间究竟有什么区别{#}

-

经过一点点测试后,列出所有truthy/falsy值{?},并将它们与以下内容进行比较{#}:

背景:

{
  values: [
    // false
    '',
    "",
    false,
    null,
    undefined,
    [],
    // true
    0,
    "0",
    "null",
    "undefined",
    "false",
    {},
    {a: 'a'}
  ]
}
Run Code Online (Sandbox Code Playgroud)

模板:

{#values}
 {?.}true{:else}false{/.}
{/values}
{~n}
{#values}
 {#.}true{:else}false{/.}
{/values}
Run Code Online (Sandbox Code Playgroud)

它输出完全相同的结果:

falsefalsefalsefalsefalsefalsetruetruetruetruetruetruetrue
falsefalsefalsefalsefalsefalsetruetruetruetruetruetruetrue
Run Code Online (Sandbox Code Playgroud)

-

它们之间真的有什么区别吗?

smf*_*ote 11

#和之间有区别?,虽然它有些微妙,但在你的例子中没有显示出来.

?(存在):检查给定密钥的真实性.如果键是真的,执行正文,否则执行:else正文.

#(部分):检查给定密钥的真实性.如果键是真实的,请将上下文设置为键,然后执行正文.如果上下文是数组,则对数组中的每个元素执行一次body.如果密钥不真实,请不要更改上下文,并执行:else主体(如果存在).

所以,如果您的模板看起来像这样:

模板:

{?values}
 {?.}true{:else}false{/.}
{/values}
{~n}
{#values}
 {#.}true{:else}false{/.}
{/values}
Run Code Online (Sandbox Code Playgroud)

然后你的输出将是:

true
falsefalsefalsefalsefalsefalsetruetruetruetruetruetruetrue
Run Code Online (Sandbox Code Playgroud)

第一行检查是否values存在,但不会更改上下文.第二行检查当前上下文(在本例中是根上下文)是否存在,并打印出来true.由于?不进入上下文并循环遍历数组,true因此只打印一次.