2010-08-31 81 views
0

設置默認值是創建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  

    } 

} 

我的問題是,如何在使用||時處理布爾值。操作

回答

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

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

1

||代表或。讓我們來看看一些樣本值:

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。

1

我的問題是,如何在使用||時處理布爾值。運營商?

我並不是一個詳盡的答案。 @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頁

2

我不認爲賦予布爾值時結構是合適的(我還小心號碼這樣做)因爲你已經給出 - 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

0

試試這個:

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

這應該工作

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

如果o。預緊ISfalse,那麼我們將它設置爲false,否則,它是true

你也許會想在開始添加o = o || {};確保o存在

0

只是強制轉換它:

this.preload = Boolean(this.preload); 

或者如果您不希望非布爾值評估爲true:

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