dust.js – Dust:逻辑部分{?}和{#}之间的区别

前端之家收集整理的这篇文章主要介绍了dust.js – Dust:逻辑部分{?}和{#}之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
{?}和{#}之间究竟有什么区别?

经过一点测试后,列出所有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只打印一次.

原文链接:https://www.f2er.com/js/158080.html

猜你在找的JavaScript相关文章