2つは同一ですか?
あなたが持っていると仮定します:
var x = true;
そして、次のいずれかを持っています。
x && doSomething();
また
if(x) doSomething();
2 つの構文の間に違いはありますか? 素敵な砂糖に出くわしましたか?
2つは同一ですか?
あなたが持っていると仮定します:
var x = true;
そして、次のいずれかを持っています。
x && doSomething();
また
if(x) doSomething();
2 つの構文の間に違いはありますか? 素敵な砂糖に出くわしましたか?
厳密に言えば同じ結果になりますが、前者を別の条件として使用すると、異なる結果が得られます。これは、 の場合x && doSomething()、doSomething()が成功を示す値を返すためです。
いいえ、それらは同一ではありません。whileifはステートメントですが、AND演算子は式です。
つまり、その結果を他の式で使用できますが、if ステートメントでは使用できません。
var result = x && doSomething();
しかし、あなたの場合、どちらも同じ効果があります。より読みやすく、プログラム構造をより適切に表すものを使用してください。if 文をお勧めします。
@Stevex && doSomething()が述べた A は式であり、
一方if(x) doSomething();、ステートメントは、
@Daniel Li と @Bergi が示唆するように、次のように考えてください。
式が計算されます (ここで値を返すことになっています)。
ステートメントが宣言されています(ここで値を返すことは想定されていません。副作用を考えてください)。
( thatExpression );thatExpression;どちらも何らかのdoNothingWithValueOfステートメントを想定しています。
使いますか:
doSomething()として
IsMyObjectWhatever()、またはMyObjectComputedValue()、ModifyMyObject()そして、次のように: を式x && doSomething()として使用しますか?
あなたはthisStatement( thatExpression );どこにでも似たようなことを考えることになるでしょう、考えてください:
()表現、;声明。「効く」のは当たり前。「それは正しい」の略ではありません。
それがいつ違いを生むかがあまり明白でない場合:
()(()())()(); で 、間違っていると思います。(;) 一言で言えば、2 つのステートメントは同じではありませんが、提示した特定の状況では結果は同じです。
x && doSomething();は式です。最初にx評価されます。これは AND であり、xが true であるため、2 番目の引数 ( doSomething()) が評価されます。この場合、これはメソッドが実行されることを意味します。false の場合x、式の結果が true にならないため、doSomething() は実行されません。
if(x) doSomething();は声明です。x の値がチェックされ、真であれば if ステートメントのスコープが実行されます。
私はこのフィドルをデモンストレーションのためにまとめました(わずかな変更を加えて)。
探偵をしよう。
最初のアプローチをConditional Arrow Invocationと呼び、2 つ目のアプローチをTraditional If Elseと呼びます。
jsperfで 2 つの個別のケースを作成して、これら 2 つのアプローチがどのように公平であるかを評価します。
const VALUE = true;
const TEST = false;
//test 1
VALUE && !TEST && (() => {
console.log('print me!');
})();
オペレーション/秒の結果:
const VALUE = true;
const TEST = false;
//test 2
if(VALUE && !TEST) {
console.log('print me!');
}
オペレーション/秒の結果:
ご覧のとおり、パフォーマンスに関しては大きな違いはありませんが、ほとんどの場合、ごくわずかな差でトラディショナル If Elseが Conditional Arrow Invocation に勝っています。これは、その場で暗黙的な関数を作成することに関係している可能性があります。
また、Chrome の JavaScript は FireFox の JavaScript の実行よりもはるかに高速であることにも気付きました。
これを自分で評価するために実行できる jsperf リンクを次に示します。
https://jsperf.com/conditional-methods-vs-traditional-if-else/1