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'
これは、color
がundefined
であり、undefined || String
が常にString
であるため機能します。もちろん、それはString || undefined
がString
である場合にも他の方法で機能します。 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 || true
がtrue
であるため機能しますが、ご覧のとおり、false || true
がmyOtherCar
であるため、true
では機能しません。 true || false
はtrue
のままなので、順序を変更しても効果はありません。
したがって、ここで何かが欠けていますか、またはデフォルト値を設定する唯一の方法は次のとおりですか?
this.hasWheels = (hasWheels === false) ? false: true
乾杯!
あなたはこれを行うことができます:
this.hasWheels = hasWheels !== false;
true
が明示的にhasWheels
である場合を除いて、false
値を取得します。 (null
やundefined
を含む他の偽の値はtrue
になります。これはあなたが望むものだと思います。)
どうですか:
this.hasWheels = (typeof hasWheels !== 'undefined') ? hasWheels : true;
他のオプションは次のとおりです。
this.hasWheels = arguments.length > 0 ? hasWheels : true;
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
投稿された回答から注目すべきバリエーションがあります。
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がデフォルトパラメータ用にコンパイルする方法です。