在JavaScript中:
falsy: false, null, undefined, 0, -0, NaN, ""
truthy: everything else, including [] and {} (empty array and empty object)
但在Handlebars中,{{#if foo}}
似乎是(来自Handlebars's docs):
falsy: false, undefined, null, "", []
truthy: everything else, including 0, -0, {}
undefined
和NaN
无法在JSON文件中列为值,因此我无法使用Java Moustache渲染器对其进行测试,但是,如果我根本没有定义属性,那么它可能只是undefined
而且它被视为假的。
上面是针对{{#if foo}}
的,为了让事情变得更复杂,那么只有Handlebars和Mustache中的{{#foo}}
呢? truthy和falsy规则是否与{{#if foo}}
完全相同?如果可能,请提供指向文档的指示以支持您的声明。希望用PHP或Java或其他语言实现Mustache或Handlebars遵循完全相同的规则。
我还发现,对于Mustache,似乎{{#foo}}
被称为一个部分,其规则是:
falsy: whatever falsy in JavaScript, plus []
truthy: everything else
但似乎can.js的Mustache / Handlebars实现将0
视为假的。 (请参阅http://jsfiddle.net/kAt7E/45/ vs http://jsfiddle.net/kAt7E/46/或http://jsfiddle.net/kAt7E/47/ vs http://jsfiddle.net/kAt7E/48/)。因此,有这么多不同的规则,这有点令人不安。
答案 0 :(得分:7)
Per the Mustache spec,真实性取决于主语言。这种跨语言有multiple attempts到standardize,但大家的共识是主持语言有最后的发言权。
在JavaScript中,!!val === true
是真实的,以及!!val === false
为假的任何内容。如果使用相同主机语言的不同Mustache实现不一致地应用此规范,那么它就是实现中的错误。