64

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は常にundefinedundefined || 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 !!!!!!

isがmyCarあるため機能しますが、ご覧のとおり、 isがあるため機能しません。順序を変更しても、そのままでは役に立ちません。undefined || truetruemyOtherCarfalse || truetruetrue || falsetrue

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

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

乾杯!

4

5 に答える 5

137

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

this.hasWheels = hasWheels !== false;

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

于 2013-03-17T18:01:15.980 に答える
6

どうですか:

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

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

this.hasWheels = arguments.length > 0 ? hasWheels : true;
于 2013-03-17T18:00:40.830 に答える