あなたが尋ねるのは、「オブジェクト検出」です。オブジェクトが存在するかどうかを検出する方法でコードを構築する必要がある場合は、&そのオブジェクトに対して操作します。あなたのコードの防弾/バグがフリー化の好ましい方法は、これを行うことです。
if (obj && obj.key2){ // If object and object property both exist...
// Do something here...
}
適切に(var
キーワードとJavaScriptで未定義の型を使用し、この時に説明予期しない条件付き反転動作を避けるためにするにはSO記事:Behavior of the typeof keyword)の前に "typeof"キーワードを付けることができます。その出力は、トリプル「===」演算子を使って文字列として比較することができます。同様に、
if (typeof value === 'undefined'){
// Do something...
}
これらのオプションのかっこを使用する傾向がありますが、必須ではありません。
if (typeof(value) === 'undefined'){
// Do something...
}
は、次に、あなたのコードは次のようになります:
あくまで一例ですが、あなたがオブジェクト検出を必要としません
var obj = {};
var someFunc = function(a){
obj = {
"key1": true,
"key2": a,
"key3": !a
};
// True > False Example:
if (obj && obj.key2) { // true
// Do something true...
} else { // false
// Do something else...
}
// False > True Example, using a "not condition" AKA "!" AKA an exclamation point:
if (obj && !obj.key3) { // false
// Here you're checking for the object, but the false value for the key3 property.
} else if (obj && obj.key3) { // true
// Here you'd need the object detection again, as you'd be checking for the key3 property on that object.
}
};
、なぜならそれは私が読みたいだけのコーディングスタイル、ですobj
をグローバル&として宣言し、関数内の値に割り当てます。理由は分かりますか?
それはそうのように、関数にVARを入れても良いでしょう:&は、機能ブロック自体にそれをスコープグローバルスコープから削除し
var obj = {
"key1": true,
"key2": a,
"key3": !a
};
を。
「let」というキーワード&については、「var」をどのように置き換えることもできます。素晴らしい
何かが、次のようになります。「偽」と「未定義」の
let someFunc = function(json) {
// Another object detection example:
if (json) {
// Since key1 is always true, we don't need the if/else for it.
// Just add any key1 code here, without the if(...) statement.
// Switches are faster than if/else-if/else statements.
switch(json.key2) {
case true:
// Do something true with key2...
break;
case false:
// Do something else with key2...
break;
}
switch(json.key3) {
case true:
// Do something true with key3...
break;
case false:
// Do something else with key3...
break;
}
}
};
// Usage:
someFunc({
"key1": true,
"key2": a,
"key3": !a
});
なし。以来、値が偽であれば、 'if'ブロックは実行されません。 – Tushar
私はブロックが偽であれば実行されるべきではないが、私の質問は偽の状態を確認するのに適していると言う文を内部で知っている – brk
'key2 in obj'はここでより意味をなさないでしょう。 –