10

まあ、これは一種のハックです:

function b2n(boo) {
    return boo ? 1 : 0;
}

if(b2n(opt1) + b2n(opt2) + b2n(opt3) !== 1) {
    throw new Error("Exactly one option must be set");
}

Javascriptでこれを行うより良い方法はありますか? のいずれかを使用して

  • よりインテリジェントなブール/数値処理
  • 卑劣な配列または関数操作

などなど。Javascript および Node ソリューションを歓迎します。

私の実際の問題では、オプションはNodeモジュールコマンダーから来ているので、真のブール値ではなく、真実と虚偽のものだけを扱っています。コマンダーソリューションもあるかもしれません。

4

6 に答える 6

6

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

if ( !!opt1 + !!opt2 + !!opt3 !== 1 ) {

それは機能するので

  • !!任意の値からブール値を作成します (trueオブジェクトが のように評価されるtrue場合if(value))
  • ブール値を追加すると、 1fortrue0forが得られますfalse
于 2013-06-25T17:53:32.057 に答える