2012-06-16 3 views
5

私の英語を許してください。私はネイティブスピーカーではありません。||を書くにはどうすればいいですか? Javascriptの式で、0は偽値として扱われません。

私の問題は、私はこの

luminosity = settings.luminosity || 50; 
opacity = settings.opacity || 100; 

のようなコードを書くときに問題が0が有効な値であることを想定しているということですが、0はJavascriptでfalsyあるので、それは見落としされ、それが設定されます来ます||の右側のデフォルト値。

修正を行う方法はありますか?0は虚偽として扱われませんか?

今私は

luminosity = "luminosity" in settings ? settings.luminosity : 50; 

をしていますが、それはとても長いですので、私はそれを好きではありません。

+1

私はあなたがそれよりも短く書くことはできないと思います。その上、あなたのアプローチはよく読めるので、私はそれを変更しようとしません。 – user123444555621

答えて

2

すべてを行う必要が

function ifNotSet(val, other) { 
    return typeof val === "undefined" ? other : val; 
} 
2

あなたは、文字列'0'に変換することができますがtruthyです:

luminosity = settings.luminosity === 0 ? '' + settings.luminosity : settings.luminosity || 50; 
opacity = settings.opacity === 0 ? '' + settings.opacity : settings.opacity || 100; 

それとも、単にあなたの入力や要件に応じて、これを使用することができます:

luminosity = '' + settings.luminosity || 50; 
opacity = '' + settings.opacity || 100; 

'' + numberは、数値を文字列に変換するための省略形です。

+0

'' '+ undefined'は '' undefined ''なので、これで問題は解決しません。 – user123444555621

2

デフォルトオプション/設定を使用する一般的な方法は.extend() method in jQueryです。純粋なJSもこのメソッドを持っていますが、いくつかの違いがあります。

/* merge object2 into object1 */ 
$.extend(object1, object2); 

これは何が必要です:

var defaultSetting = {luminosity : 50, opacity : 100}; 
setting = $.extend({}, defaultSetting, setting); 
+0

私は' 'set = $ .extend({}、defaultSetting、setting);上記の答えでは、defaultSettingのプロパティは、設定中のプロパティがすでに定義されていても、設定内のプロパティを上書きします。 –

+0

ええ、あなたは正しいです。 –

+1

質問にjQueryの言及はありません。 –

1

は@ Toorajのコードの最初のバージョンの調整...ヘルパー関数を記述しています:

var setting = {luminosity:0}; 
var defaultSetting = {luminosity:50, opacity:100}; 

setting = $.extend({}, defaultSetting, setting); 

// setting now has a value of {luminosity:0, opacity:100} 

私はこれを前にしていません。しかし、それはFF、クロム、およびIE9で正常に動作するようです。

関連する問題