2016-09-04 8 views
3

私は、プロジェクト内のコード行を見つけて、私はできなかったJavaScriptの奇妙な割り当てコード

return d.isPointInside(a, b) ? (console.log("runned"), c = !0, !1) : void 0 

下で、私は一部を理解することができませんでした:

(console.log("runned"), c = !0, !1) 

言葉は「runned」ブラウザのコンソールに表示する必要がありますが、残りの部分を理解するためにいくつかの助けが必要です。

+0

[This](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Comma_o​​perator)は、 – hindmost

答えて

4

ただ、いくつかのタイプのjuggeling

!0 === true 
!1 === false 
void 0 === undefined 

結果、いくつかの長い言葉で:

(console.log("runned"), c = true, false); 

完全なreturn文はComma Operatorを使用せずに、次のように読み取ります

if (d.isPointInside(a, b)) { 
    console.log("runned"); 
    c = true; 
    return false; 
} else { 
    return undefined; 
} 
+0

を理解するのに役立つかもしれません。ありがとう、これらの応答は非常に便利でした。 –

+0

さて、あなたは答えを受け入れるべきです:) –

2

コンマはシーケンスを作成するだけなので、最終的にこのステートメントは返されます! 1は偽である。このコードは、シーケンス構文を利用してコンソールに出力し、変数を設定する副産物を生成しています。

これは次のようなものです。

var a、b、c;

変数を宣言しても何もしません。これは等しく有効です:

var a = 7、b = someComplexCalculation()、c;

!1は偽であり、無用ですが、JavaScriptではタイプを強制的にブールにするため、これは便利なフォームです。開発時に!1を!aに変更すると、ブール値を返すことが保証されます。

シーケンスの最後の値がステートメントを完了し、戻り値として機能します。

ので:

X =(3、Math.sqrt(2)、 "何か");

はX =「何か」

+0

* 'このステートメントは返されます!1は偽です.' *あなたはあなたの答えを拡大すべきです。 –

1

最初に設定されます、コードは最後の要素を返しますが、すべてを評価するJavaScriptでcomma operatorを使用しています。たとえば、最後の項目だけが返されるため、var a = 1, 2, 3;は常に3に等しくなります。

これを考慮して

、あなたは理解していなかったコードの一部を見てみましょう:

(console.log("runned"), c = !0, !1) 

によりコンマ演算子には、これは順番に評価される3つの式に分裂します

console.log("runned") 

コンソールで指定された単語を印刷します。

c = !0 

は、変数ctrueの値を割り当てます。これは、ゼロが偽の値であり、not演算子!を使用して逆に変換すると、trueが生成されるからです。

`!1` 

最後に、この式の結果は、大括弧内のセクション全体から返されます。上記と同様に、これは1が真実値であるという事実を利用しているので、!1falseとなる。

全体として、コードは印刷し、値を割り当て、値をすべて1行に返します。

文法と変数が使用されていると仮定すると、これは最小化されたコードです。 Minificationは、使用される文字の量を減らすために、同様の方法で言語ルールを使用します。部分的な!0および!1は、後者の長さの少なくとも半分であるので、trueおよびfalseの非常に一般的な置換である。