7

{?}和 和到底有什么区别{#}

--

经过一些测试,列出 的所有真值/假值{?},并将它们与 进行比较{#}

上下文

{
  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

--

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

4

1 回答 1

11

#和之间有区别?,尽管它有些微妙并且在您的示例中没有显示出来。

?(存在):检查给定密钥的真实性。如果密钥为真,则执行主体,否则执行:else主体(如果有)。

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

因此,如果您的模板看起来像这样:

模板:

{?values}
 {?.}true{:else}false{/.}
{/values}
{~n}
{#values}
 {#.}true{:else}false{/.}
{/values}

那么你的输出将是:

true
falsefalsefalsefalsefalsefalsetruetruetruetruetruetruetrue

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

于 2013-08-12T15:14:42.007 回答