私は現在、フロー制御の例外に頼るコードが散らばっている大規模なJavascriptコードベースで作業しています
function getChecklistUrl() {
try {
return dataLayerObject.config.checklist;
} catch (e) {
try {
console.error('dataLayer', e);
} catch (ignore) {}
}
}
同じ関数のこの実装などの条件付きロジックを好むかもしれません
function getChecklistUrl() {
if(typeof dataLayerObject == 'object' &&
'config' in dataLayerObject &&
typeof dataLayerObject.config == 'object' &&
'checklist' in dataLayerObject.config &&
typeof dataLayerObject.config.checklist == 'object') {
return dataLayerObject.config.checklist;
}
return null;
}
後者は長ったらしく感じますが、ヘルパー関数を記述して、そのようなチェックのボイラープレートを減らすことができます。
前者はJavascriptの慣用的なものですか? 後者は(ブラウザ/シナリオ全体で)脆弱であり、とにかくtry
/に任せた方がよいですか?catch
それとも前者は単に怠惰の証拠ですか?
編集
これらのオブジェクトは「プレーンな」オブジェクトであると推定されるvar obj = {}
ため、ここでプロトタイプ チェーンを気にする必要はないと思います。