0

そこで、さまざまな公開 API (JSONP 経由) からデータを取得し、そのデータを使用してローカル レコードを装飾するブラウザー アプリケーションを作成しています。

ええ、これは事前にサーバー側で行うことができますが、私はまだそこにいません.

JavaScript で try/catch を使用したことがありません。変更される可能性のある応答でルックアップを試みるresponse.foo.bar.baz場合、これを使用するのに適した時期でしょうか?

または、深くネストされたプロパティを検索し、見つからない場合にエラーをスローしない、よりエレガントな方法はありますか?

4

3 に答える 3

0

次のようなことができます。

response && response.foo && response.foo.bar && response.foo.bar.baz

ネストされたプロパティのいずれかが存在しない場合は、undefinedそれ以外の場合は の内容が返されますresponse.foo.bar.baz

この関数を使用できる代替手段:

function getNestedProperty(firstObject, propertiesArray)
{
    if(firstObject instanceof Object)
    {
        var currentObject = firstObject;
        for(var i = 0; i < propertiesArray.length; i++)
        {
            if(currentObject.hasOwnProperty(propertiesArray[i]))
            {
                currentObject = currentObject[propertiesArray[i]];
            }
            else
            {
                return false;
            }
        }
        return currentObject;
    }
    else
    {
        return false;
    }
}

使用法:

getNestedProperty(response, ['foo', 'bar', 'baz']);
于 2012-05-11T18:34:59.230 に答える
0

おそらく次のように書く方が簡単です:

try {
    response.foo.bar.baz;
}
catch (e) {
    //oops
}

よりも:

if( response && response.foo && response.foo.bar && "baz" in response.foo.bar ) {

}
else {
    //oops
}
于 2012-05-11T18:35:13.723 に答える
0

代替案が次のようなものであるとします。

if ('foo' in response &&
    'bar' in response.foo &&
    'baz' in response.foo.baz)
{
    ...
}

この場合、try / catchブロックが良い選択肢のようです!

于 2012-05-11T18:35:37.583 に答える