0

Javascriptでいくつかのファンデマンテルを試しているときに、私を驚かせた質問に出くわしましたが、その答えを見つけることができません。私は次のものを手に入れました、それは完璧に機能します:

var obj= new Object ();
    obj.test = "Hello" 

    obj.testTwo= function (){
        console.log(this.test)
    },obj.testTwo();

カンマなしで試してみると動作しません。

var obj= new Object ();
    obj.test = "Hello" 

    obj.testTwo= function (){
        console.log(this.test)
    }obj.testTwo();

だから私はこれを3番目のオプションとして試しました...そしてそれは機能しますか?

var obj= new Object ();
    obj.test = "Hello" 

    obj.testTwo= function (){
        console.log(this.test)
    }
    obj.testTwo();

今、私は静かに混乱しています。なぜコンマを使用するのですか、そしてなぜそれは休憩で機能するのですか?

4

4 に答える 4

3

表示されているのは、動作中のコンマ演算子です。https://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/

于 2013-03-01T19:00:50.160 に答える
2

最初のスニペットでは、コンマ演算子は文書化されているとおりにその役割を果たします:" evaluates both of its operands (from left to right) and returns the value of the second operand." MDN

基本的に、2番目のスニペットは割り当てです。最後の式がステートメントのブロックであっても、割り当ては常にセミコロンで終了する必要があります。ただし、これはASIには明らかではありません。したがって、このスニペットは、ブロックとオブジェクトのメソッド呼び出しの間にセミコロンまたは改行がないと失敗します。インタープリターは、演算子または割り当ての終了を確認する必要があります。これらのいずれも見つからない場合、Unexpected tokenエラーがスローされます。この同じ説明は、3番目のスニペットが機能する理由を表しています。

于 2013-03-01T20:13:06.467 に答える
0

コンマ演算子は、両方のオペランド(左から右へ)を評価し、2番目のオペランドの値を返します。

したがって、両方のコードを評価します。しかし、それらを組み合わせるとそうではありません。

続きを読む...

例:

それはあなたがするときと同じです

var a = 10, b = 40;
于 2013-03-01T18:59:54.843 に答える
0

改行(\nまたは\r\n)とコンマ(,)は、ステートメントの区切り文字として機能します。

于 2013-03-01T19:06:22.523 に答える