微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/js/158080.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐