web-dev-qa-db-ja.com

JavaScriptでデフォルトのブール値を設定する方法は?

JavaScriptでデフォルトのオプション値を設定するには、通常、||文字を使用します。

var Car = function(color) {
  this.color = color || 'blue';
};

var myCar = new Car();
console.log(myCar.color); // 'blue'

var myOtherCar = new Car('yellow');
console.log(myOtherCar.color); // 'yellow'

これは、colorundefinedであり、undefined || Stringが常にStringであるため機能します。もちろん、それはString || undefinedStringである場合にも他の方法で機能します。 2つのStringsが存在する場合、最初の方が'this' || 'that''this'になります。 'that' || 'this''that'であるため、逆の方法では機能しません。

質問は次のとおりです。ブール値で同じことをどのように達成できますか?

次の例を見てください

var Car = function(hasWheels) {
  this.hasWheels = hasWheels || true;
}

var myCar = new Car();
console.log(myCar.hasWheels); // true

var myOtherCar = new Car(false)
console.log(myOtherCar.hasWheels); // ALSO true !!!!!!

myCarの場合、undefined || truetrueであるため機能しますが、ご覧のとおり、false || truemyOtherCarであるため、trueでは機能しません。 true || falsetrueのままなので、順序を変更しても効果はありません。

したがって、ここで何かが欠けていますか、またはデフォルト値を設定する唯一の方法は次のとおりですか?

this.hasWheels = (hasWheels === false) ? false: true

乾杯!

54
zemirco

あなたはこれを行うことができます:

this.hasWheels = hasWheels !== false;

trueが明示的にhasWheelsである場合を除いて、false値を取得します。 (nullundefinedを含む他の偽の値はtrueになります。これはあなたが望むものだと思います。)

115
Ted Hopp

どうですか:

this.hasWheels = (typeof hasWheels !== 'undefined') ? hasWheels : true;

他のオプションは次のとおりです。

this.hasWheels = arguments.length > 0 ? hasWheels : true;
6
Chris Cooper

ECMA6で デフォルトの関数パラメーター 機能を使用できます。現在、ECMA6はまだブラウザで完全にはサポートされていませんが、 babel を使用して、すぐに新しい機能を使用できます。

したがって、元の例は次のように単純になります。

// specify default value for the hasWheels parameter
var Car = function(hasWheels = true) {
  this.hasWheels = hasWheels;
}

var myCar = new Car();
console.log(myCar.hasWheels); // true

var myOtherCar = new Car(false)
console.log(myOtherCar.hasWheels); // false
3
kmandov

投稿された回答から注目すべきバリエーションがあります。

var Var = function( value ) {
    this.value0 = value !== false;
    this.value1 = value !== false && value !== 'false';
    this.value2 = arguments.length <= 0 ? true : arguments[0];
    this.value3 = arguments[0] === undefined ? true : arguments[0];
    this.value4 = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
};

                     value0   value1   value2        value3         value4
---------------------------------------------------------------------------
Var("")              true     true     true          true           true
Var("''")            true     true     ''            ''             ''
Var("0")             true     true     0             0              0
Var("'0'")           true     true     '0'           '0'            '0'
Var("NaN")           true     true     NaN           NaN            NaN
Var("'NaN'")         true     true     'NaN'         'NaN'          'NaN'
Var("null")          true     true     null          null           null
Var("'null'")        true     true     'null'        'null'         'null'
Var("undefined")     true     true     undefined     true           true
Var("'undefined'")   true     true     'undefined'   'undefined'    'undefined'
Var("true")          true     true     true          true           true
Var("'true'")        true     true     'true'        'true'         'true'
Var("false")         false    false    false         false          false
Var("'false'")       true     false    'false'       'false'        'false'
  • value1は特にvalue0文字列 'false'がブール値falseである必要がある場合。このリラクゼーションは時折役に立つことがわかりました。
  • value2およびvalue3は、結果を変更することなく、一貫性を保つために投稿された元の回答を修正したものです。
  • value4は、Babelがデフォルトパラメータ用にコンパイルする方法です。
3
Season