小胡子和把手中的真实或虚假是什么?

时间:2014-01-29 22:59:57

标签: mustache handlebars.js

在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, {}

undefinedNaN无法在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/)。因此,有这么多不同的规则,这有点令人不安。

1 个答案:

答案 0 :(得分:7)

Per the Mustache spec,真实性取决于主语言。这种跨语言有multiple attemptsstandardize,但大家的共识是主持语言有最后的发言权。

在JavaScript中,!!val === true是真实的,以及!!val === false为假的任何内容。如果使用相同主机语言的不同Mustache实现不一致地应用此规范,那么它就是实现中的错误。