2017-02-08 8 views
1

私はこれらの2つのコードブロックを持っています。誰かがこのエラーを説明することができます:式文は代入または呼び出しではありません

socket.on('chatMessage', function(message) { 
    message.type = 'message'; 
    message.created = Date.now(); 
    message.username : socket.request.user.username; 
}); 

socket.on('disconnect', function() { 
    io.emit('chatMessage', { 
     type: 'status', 
     text: socket.request.user.username + ' left the conversation.', 
     created: Date.now(), 
     username: socket.request.user.username, 
    }); 
}); 

私は他に:または=を変更する場合は、Webstormは私にエラーを与えます。 Expression statement is not assignment or call.誰かがこれがなぜ起こるか説明できますか?前もって感謝します。

答えて

1

最初のコードブロックは、機能ブロックを定義しています。 2番目のコードブロックはオブジェクト定義を定義しています。それぞれに異なる構文があり、コンテキストに合わせるために適切な構文を使用する必要があります。

最初のコードブロックは、機能ブロックで一連のステートメントを実行するだけです。この行の末尾に{

socket.on('chatMessage', function(message) { 

は、機能ブロックの始まりを定義します。したがって、Javascriptはその文脈で合法的な文を探しています。コードの各行は合法的なJavascriptステートメントである必要があります。そして、

message.username : socket.request.user.username; 

は、この文脈では法的声明ではありません。あなたはmessage.usernameに値を代入しようとしていた場合は、そのための有効な構文は次のようになります。

message.username = socket.request.user.username; 

をあなたの第二のブロックでは、オブジェクト定義の真ん中にあります。この行の末尾に{

io.emit('chatMessage', { 

は、オブジェクト定義を開始します。そのため、そのオブジェクトのプロパティを定義するための法的な構文は次のようになります。だから、

username: socket.request.user.username, 

、2つのキーがここにあります:{を意味する場合

  1. が認識します機能ブロックの開始対オブジェクト定義の開始。最初のコードブロックは関数本体を開始し、2番目のコードブロックはオブジェクト定義を開始します。

  2. 機能ブロックで許可される構文とオブジェクト定義で許可される構文との違いを知る。

+0

ありがとう、それは多くの助けになりました... –

0

これはokです:

message.type = 'message'; 

これはokです:

message.created = Date.now(); 

これではありません。

message.username : socket.request.user.username; 

それは次のようになります。

message.username = socket.request.user.username; 

あなたの質問は明確ではありません - :=に変更するか、または変更する前に警告が表示されますか。あなたはどのラインがエラーを引き起こすかは言わなかった、の代わりに:のものと仮定した。

コロンを異なる方法で解釈できるタイプスクリプトを使用していないことは確かですか?

+0

いいえ私はタイプスクリプトを使用していません。あなたは正しいと思いました。最初のブロックで '='から ':'に変更したり、2番目のブロックで ':'から '='に変更すると、エラーが出ます。なぜそれがこのようなものなのか説明できますか?違いは何ですか? –

関連する問題