处理布尔值

时间:2010-08-31 13:37:59

标签: javascript object

设置默认值是我在创建JavaScript应用程序时最喜欢做的事情之一。在工作的时候,我遇到了一个很容易逃脱的错误。

这是对象的使用方式。

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    

   }

}

我的问题是,使用 || 运算符时如何处理布尔值

7 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我不认为在分配布尔值时这种构造是合适的(我也会小心地用数字做这个)因为你给出的原因 - false值将被视为无效,甚至虽然它很好而且确实需要。

在您的情况下,您可以使用

进行作业
this.preload = o.preload && true;

答案 2 :(得分:1)

||代表或。我们来看一些示例值:

this.preload = o.preload || true;

如果o.preLoad = true:

true || true is the same as  = true;

如果o.preLoad = false:

false || true always will equal true

由于您将o.preLoad定义为默认值为false,因此该语句将始终评估为true。

答案 3 :(得分:1)

  

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

我不是一个详尽的答案。 @bkail's solution应该做到这一点。但是,我想指出以下几点:

如果第一个操作数是真实的,||运算符将生成其第一个操作数的值。否则它会产生第二个操作数 1 的值。

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 {}"

1 来源:道格拉斯·克罗克福德的JavaScript: The Good Parts - 第17页

答案 4 :(得分:0)

试试这个:

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

答案 5 :(得分:0)

这应该有效

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

如果o.preload IS false,我们会将其设为false,否则为true

您可能希望在开头添加o = o || {};以确保o存在

答案 6 :(得分:0)

只是强调它:

this.preload = Boolean(this.preload);

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

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