【问题标题】:Handling boolean values处理布尔值
【发布时间】:2010-08-31 13:37:58
【问题描述】:

设置默认值是我在创建 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    

   }

}

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

【问题讨论】:

    标签: javascript object


    【解决方案1】:
    this.preload = "preload" in o ? o.preload : true;
    

    【讨论】:

      【解决方案2】:

      由于您给出的原因,我认为在分配布尔值时该构造不合适(我也会小心使用数字) - false 值将被视为无效,即使它是很好,确实很需要。

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

      this.preload = o.preload && true;
      

      【讨论】:

      • @Q_the_novice,如果未设置 o.preload,则返回 undefined。 var o = {};alert(o.preload && true);
      • o.preload === false ? false : true,正如我在回答中提到的那样
      • @Chad +1 感谢您指出这一点,没有花足够的时间进行测试。
      【解决方案3】:

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

      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。

      【讨论】:

        【解决方案4】:

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

        我的答案并不详尽。 @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,Douglas Crockford - 第 17 页

        【讨论】:

          【解决方案5】:

          试试这个:

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

          【讨论】:

            【解决方案6】:

            这应该可以工作

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

            如果o.preload IS false,那么我们将它设置为false,否则,它是true

            您可能只想在开头添加一个o = o || {}; 以确保o 存在

            【讨论】:

              【解决方案7】:

              只需进行类型转换:

              this.preload = Boolean(this.preload);
              

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-12-15
                • 1970-01-01
                • 2023-04-04
                • 2018-09-07
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多