处理布尔值

问题描述:

设置默认值是创建JavaScript应用程序时最喜欢做的事情之一。在工作时,我遇到了一个可以轻易逃脱我的bug。处理布尔值

这是如何使用该对象。

var obj = new App({ 
      imgs: []; 
      preload: false 
      }); 

这是如何定义对象的。

var App = function(o) { 

    this.imageFolder = o.imgs; 

    this.preload = o.preload || true; // the idea is to set a default value of true 

    if(this.preload) { 

    // preload images here  

    } 

} 

我的问题是,如何在使用||时处理布尔值。操作

this.preload = "preload" in o ? o.preload : true; 
+0

+1也正确 – 2010-08-31 14:03:02

||代表或。让我们来看看一些样本值:

this.preload = o.preload || true; 

如果o.preLoad =真:

true || true is the same as = true; 

如果o.preLoad = FALSE:

false || true always will equal true 

自定义o.preLoad具有默认值为false,该语句将始终评估为true。

我的问题是,如何在使用||时处理布尔值。运营商?

我并不是一个详尽的答案。 @bkail's solution应该做的伎俩。但是,我想指出以下内容:

如果第一个操作数为truthy,则||运算符会生成其第一个操作数的值。否则它会产生第二个操作数的值。

var preload;      // undefined is falsy 
preload = preload || true; 
console.log(preload);   // true 

var preload = false;    // false is obviously falsy 
preload = preload || true; 
console.log(preload);   // true 

var preload = "";    // empty string is falsy 
preload = preload || true; 
console.log(preload);   // true 

var preload = null;    // null is falsy 
preload = preload || true; 
console.log(preload);   // true 

var preload = "something else"; // a non-empty string is truthy 
preload = preload || true; 
console.log(preload);   // returns "something else", the first operand 

var preload = {};    // even an empty object is truthy 
preload = preload || true; 
console.log(preload);   // returns "Object {}" 

来源:JavaScript: The Good Parts由Douglas Crockford的 - 第17页

我不认为赋予布尔值时结构是合适的(我还小心号码这样做)因为你已经给出 - false价值将被视为无效,即使它很好,确实需要。

你的情况,你可以做的分配与

this.preload = o.preload && true; 
+0

+1简单 – 2010-08-31 14:02:02

+0

@Q_the_novice,如果未设置“o.preload”,则返回undefined。 'var o = {}; alert(o.preload && true);' – CaffGeek 2010-08-31 14:09:42

+2

使用'!! o.preload && true'。 – 2010-08-31 14:15:55

试试这个:

this.preload = !o || o.preload == null ? true : o.preload; 

这应该工作

this.preload = o.preload === false ? false : true; 

如果o。预紧ISfalse,那么我们将它设置为false,否则,它是true

你也许会想在开始添加o = o || {};确保o存在

只是强制转换它:

this.preload = Boolean(this.preload); 

或者如果您不希望非布尔值评估为true:

this.preload = typeof this.preload === 'boolean' ? this.preload : false;