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只打印一次.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...