。1、ボイドオペレータ
アクションボイド演算子は、式を行って、その後、値を返さない、または戻る未定義。
void 0 // undefined
void(0) // undefined
上記の2つの方法で無効演算子であり、正確です。それは常に括弧を使用し、フォームを示唆した後。カッコを使用しない場合が高いため、優先度のボイドオペレータの、簡単に誤った結果につながります。例えば、空隙4 + 7(ボイド4)+ 7と実質的に同一です。
以下は、ボイドオペレータの一例です。
var x = 3;void (x = 5) //undefined
x // 5
この演算子の主な目的は、ブラウザのブックマークツール(ブックマークレット)で、コードの防止にページジャンプのハイパーリンクを挿入します。
次のコードを考えてみましょう。
<script>function f() { console.log('Hello World');
}</script><a href="http://example.com" onclick="f();
return false;">点击</a>
上記のコードは、リンクをクリックして、それが最初のonclickのリターン偽ので、コードをonclickの実行されますので、ブラウザがexample.comにジャンプしません。
空オペレータは、上記の文言を置き換えることができます。
<a href="javascript: void(f())">文字</a>
ここでは、より実用的な例であり、リンク上のユーザーのクリックは、フォームを送信しますが、ページジャンプを生成しません。
<a href="javascript: void(document.form.submit())">提交</a>
2、コンマ演算子
コンマ2件の発現の評価のためにオペレーター、および発現の戻り値の後。
'a', 'b' // "b"
var x = 0;var y = (x++, 10);
x // 1
y // 10
上記のコード、コンマ演算子後表現戻り値。
コンマ演算子の1つの用途は、いくつかの補助操作を値を返す前に、です。
var value = (console.log('Hi!'), true);
// Hi!
value // true
上記のコードでは、最初の操作は、カンマの前に行われ、その後、カンマの後の値を返します。
図3に示すように、動作シーケンス
3.1、優先順位
優先順位(演算子の優先順位)JavaScriptのさまざまな演算子が同じではありません。オペレータに高い優先順位が低い優先順位の演算子の後に行われます。
4 + 5 * 6 // 34
上記のコード、乗算演算子(*)は、乗算は加算演算子(+)の優先度よりも高い第行い、その後加算を行い、これは以下と等価です。
4 + (5 * 6) // 34
複数の事業者が混在一緒に書くためにした場合、多くの場合、コードを混乱につながります。
var x = 1;var arr = [];
var y = arr.length <= 0 || arr[0] === undefined ? x : arr[0];
上記のコード5つの演算子を含む式は、最も高い優先度で終わりで、それは覚えておくことが容易ではないので、変数yの値は、参照することは非常に困難です。
言語仕様に従って、又はより:?それ以下の降順5つのオペレータの優先度(<=)に等しく、厳密に等しい(===)または(||)、3元(:)、(等号=)。次のようにこのようにして上記の式は、実際の動作シーケンスです。
var y = ((arr.length <= 0) || (arr[0] === undefined)) ? x : arr[0];
すべての演算子の優先順位は、それは非常に困難であり、それは必要ではないことに注意してください。
3.2括弧ロール
括弧(())、それが最優先であるため、その発現は、括弧内の最初のオペレータとなり、動作の優先順位を増加させるために使用することができます。
(4 + 5) * 6 // 54
上記のコード、括弧の使用は、さらには乗算の前に実行されます。
優先順位の演算子が非常に複雑で、かつ必須ですが、常に業務の明確かつ読みやすい順序を保証するために括弧を使用することをお勧めします、維持し、デバッグコードすることが不可欠です。
ちなみに、括弧は、オペレータが、文法構造ではありません。これは、2つの方法があります:1は、優先順位操作を、括弧内の式を入れてアップグレードすることで、他の関数を呼び出すことである役割の機能の背後にあります。
オペレータは括弧ではないので、それが唯一の優先順位の操作を変更、効果の評価を持っていない、ことに注意してください。
var x = 1;
(x) = 2;
上記のコードの2行目、効果は括弧で評価された場合、その後あきらめされている、= 2 1となります。しかし、上記のコードは評価されていない、括弧は唯一の優先順位を変更検証する、実行することができます。
これはまた、式全体を括弧内に置かれている場合、それは何の影響も及ぼさないことを意味します。
(exprssion)// 等同于
expression
カッコ内の関数は、関数自体に戻ります。すぐに機能した後の括弧場合は、関数が呼び出されることを意味します。
function f() { return 1;
}
(f) // function f(){return 1;}
f() // 1
関数が呼び出す関数である後に上記のコード、関数は括弧内に配置され、括弧で、関数自体を返します。
括弧では、式が唯一の文が括弧内に置かれている場合、それはエラーになります配置することができます。
(var a = 1)// SyntaxError: Unexpected token var
3.3、左と右の結合の結合
ほとんどの場合、計算順序は常に左から右であることをオペレータに同じ優先レベルを、これはオペレーターと呼ばれる(左から右への結合性「結合左」 )、 すなわち、左から計算。
x + y + z
上記のコードでは、まず左端のxとyを算出し、Zを算出します。
しかし、いくつかの演算子の順序が右に最初から、すなわち、右から左に計算され、これは、(右から左への結合性)演算子「右結合」と呼ばれます。そのうち、最も重要なのは?代入演算子(=)と三項条件演算子(:)です。
w = x = y = z;
q = a ? b : c ? d : e ? f : g;
上記のコードの計算結果は次のように対応します。
w = (x = (y = z));
q = a ? b : (c ? d : (e ? f : g));
2行のコードの上に、各3三の等号演算子三項演算子は、最初の右端のオペレータと計算されます。
指数演算子(**)は右結合です。
// 相当于 2 ** (3 ** 2)2 ** 3 ** 2// 512