3

ブール値が渡されることになっているjQueryプラグインを構築するとき、ユーザーフレンドリーな方法で入力をブール値に変換する最も簡単な方法は何ですか?

より正確に言えば、人々が'false'(プレーンの代わりに) の文字列を渡す可能性があるため、またはをfalse単純に変換すると「間違った」値 ( is ) が返される可能性があるのではないかと心配しています。!!optionBoolean(option)!!'false'true

現時点では、次のvar optionようにチェックしています:

if (typeof(option) != 'boolean'){
    if (option === 'false'){
        option = false; //fake false
    } else {
        option = !!option; //everything else is converted as truthy / falsy in a standard manner  
    }
}

しかし、もっとエレガントで簡潔な方法があるのではないかと思っていましたか、それとも JavaScript がこれを処理する方法ですか?

4

3 に答える 3

4

そのような入力を恐れている場合、最も確実な方法は、ただ行うことです

if (typeof(option) != 'boolean')
    console.error('Function X expects a Boolean.');

あなたが今持っている解決策を見てください。あなたは考慮していませんでした0または1. またはどうnoですかyes

文字列と整数は、ブール値として使用するためのものではありません。したがって、それらを解析する必要はありません。


高品質/使用率の高い JS フレームワークを見てください。彼らはこれを行いません。 なぜあなたはすべきですか?

于 2012-04-29T15:56:33.683 に答える
4

私はこれをします。

var result = ( userInput === true );

この結果が true を返す唯一の方法は、型がブール値で値が true の場合です。そうでなければ、他のすべては偽です。他人の過ちを正そうとして時間を無駄にしないでください。

でも……時間に余裕のある方は是非試してみてください。

var getBooleanValue = function( userInput ){
    if( !userInput ){
        return false;
    }
    var boolNames = {
        'true':1, 'yes':1,
        'false':0,'no':0,
        'yourMoM':1
    };
    return (userInput in boolNames && !!boolNames[ userInput ])|| ( userInput === true );
};
var tests = [
    [ true, true ],
    [ 'true', true ],
    [ 'yes', true ],

    [ false, false ],
    [ 'false', false ],
    [ 'no', false ]
];
var runTest = function( tests ){
    var i = tests.length;
    while( i-- ){
        if( getBooleanValue(tests[i][0]) !== tests[i][1] ){
            throw new Error( "Test error: getBooleanValues( " + tests[i][0] + ") should return " + tests[i][1] );
        }
    }
};
runTest( tests );
于 2012-04-29T15:52:49.723 に答える
3

私はこのようなことをします:

var falsey = ["0", "", "false", "null", "undefined", "NaN"];
var isFalse = false;

for(var i = 0, len = falsey.length; i < len; i++){
    if(options + "" == falsey[i]){
        isFalse = true;
        break;
    }
}

私がしたことは、optionsと偽の値の両方を文字列化することです0, "", false, null, undefined, NaN

これにより、それらが何であるかに関係なくそれらが検出されます(検索語と比較語の両方を大文字にするのと同様の手法)

リストが短いので、スイッチケースやifsでもそれを行うことができます

于 2012-04-29T16:02:48.297 に答える