-2

こんにちは私は、関数が何かを返すかどうかをチェックし、falseを返す場合はフォールバックする良い方法があるかどうか知りたいです。

function setPage(hash){
    for(k = 0; k<magazine.pages.length ; k++ )
    {
        if( magazine.pages[k][2] == hash )
        {
            return k;
            break;
        }
    }
    return false;
};

var actualPage = ( !hash ? 0 : setPage(hash.replace('#', '')) ? setPage(hash.replace('#', '')) : 0 )} );

setPage()関数が2回呼び出されるのを避けたいのですが、ハッシュがtrueの場合にのみ呼び出されるようにしたいので、以前はその値を保存できませんでした。短い構文を犠牲にすることなくそれを行うことは可能ですか?

4

2 に答える 2

0

ブール||(または)を使用できます。

var actualPage = ( !hash ? 0 : setPage(hash.replace('#', '')) || 0 )} );

Javascriptは短絡評価を利用します-||左側の式をテストし、それが真実である場合は値を返し、そうでない場合は右側に値を返します。

例えば

var echoBack = function(v) { return v; }

echoBack(false) || 0; // 0;

echoBack('hello') || 0; // 'hello'
于 2013-01-06T20:40:01.490 に答える
0

問題がなくなる代わりにsetPage()メソッドを返すようにすると、メソッドはあいまいな変数タイプを返さなくなります。0false

function setPage(hash){
    for(k = 0; k < magazine.pages.length ; k++ )
    {
        if( magazine.pages[k][2] == hash )
        {
            return k;
            break;
        }

    }
    return 0;
};


var pageNum = hash ? setPage(hash.replace("#", "")) : 0;
于 2013-01-06T20:36:14.337 に答える