diff --git a/lib/handlebars/compiler/javascript-compiler.js b/lib/handlebars/compiler/javascript-compiler.js index 19066d34f..d41cacd73 100644 --- a/lib/handlebars/compiler/javascript-compiler.js +++ b/lib/handlebars/compiler/javascript-compiler.js @@ -293,7 +293,7 @@ JavaScriptCompiler.prototype = { // when we examine local this.flushInline(); var local = this.popStack(); - this.pushSource("if(" + local + " || " + local + " === 0) { " + this.appendToBuffer(local) + " }"); + this.pushSource('if (' + local + ' != null) { ' + this.appendToBuffer(local) + ' }'); if (this.environment.isSimple) { this.pushSource("else { " + this.appendToBuffer("''") + " }"); } diff --git a/lib/handlebars/utils.js b/lib/handlebars/utils.js index 087183e54..f38b7afb2 100644 --- a/lib/handlebars/utils.js +++ b/lib/handlebars/utils.js @@ -55,8 +55,10 @@ export function escapeExpression(string) { // don't escape SafeStrings, since they're already safe if (string instanceof SafeString) { return string.toString(); - } else if (!string && string !== 0) { + } else if (string == null) { return ""; + } else if (!string) { + return string + ''; } // Force a string conversion as this will be done by the append regardless and diff --git a/spec/basic.js b/spec/basic.js index 8aa54b98c..8a9c116cf 100644 --- a/spec/basic.js +++ b/spec/basic.js @@ -50,6 +50,14 @@ describe("basic context", function() { shouldCompileTo("num: {{.}}", 0, "num: 0"); shouldCompileTo("num: {{num1/num2}}", {num1: {num2: 0}}, "num: 0"); }); + it('false', function() { + shouldCompileTo('val1: {{val1}}, val2: {{val2}}', {val1: false, val2: new Boolean(false)}, 'val1: false, val2: false'); + shouldCompileTo('val: {{.}}', false, 'val: false'); + shouldCompileTo('val: {{val1/val2}}', {val1: {val2: false}}, 'val: false'); + + shouldCompileTo('val1: {{{val1}}}, val2: {{{val2}}}', {val1: false, val2: new Boolean(false)}, 'val1: false, val2: false'); + shouldCompileTo('val: {{{val1/val2}}}', {val1: {val2: false}}, 'val: false'); + }); it("newlines", function() { shouldCompileTo("Alan's\nTest", {}, "Alan's\nTest"); diff --git a/spec/utils.js b/spec/utils.js index ea7d78256..0216c8de8 100644 --- a/spec/utils.js +++ b/spec/utils.js @@ -30,8 +30,8 @@ describe('utils', function() { equals(Handlebars.Utils.escapeExpression(''), ''); equals(Handlebars.Utils.escapeExpression(undefined), ''); equals(Handlebars.Utils.escapeExpression(null), ''); - equals(Handlebars.Utils.escapeExpression(false), ''); + equals(Handlebars.Utils.escapeExpression(false), 'false'); equals(Handlebars.Utils.escapeExpression(0), '0'); }); it('should handle empty objects', function() {