我有这两块代码。
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,
});
});
Run Code Online (Sandbox Code Playgroud)
如果我更改:或更改=为其他,Webstorm 会给我错误。Expression statement is not assignment or call.有人可以解释为什么会发生这种情况吗?提前致谢。
您的第一个代码块是定义一个功能块。您的第二个代码块是定义对象定义。每个都允许使用不同的语法,您必须使用适当的语法来匹配上下文。
您的第一个代码块只是在功能块中执行一系列语句。在{这行的末尾:
socket.on('chatMessage', function(message) {
Run Code Online (Sandbox Code Playgroud)
定义功能块的开始。因此,Javascript 正在寻找在该上下文中合法的语句。每行代码都需要有一个合法的 Javascript 语句。和,
message.username : socket.request.user.username;
Run Code Online (Sandbox Code Playgroud)
在这种情况下不是法律声明。如果您尝试为 赋值message.username,则其有效语法为:
message.username = socket.request.user.username;
Run Code Online (Sandbox Code Playgroud)
在您的第二个块中,您处于对象定义的中间。在{这行的末尾:
io.emit('chatMessage', {
Run Code Online (Sandbox Code Playgroud)
开始一个对象定义。因此,在该对象上定义属性的合法语法如下所示:
username: socket.request.user.username,
Run Code Online (Sandbox Code Playgroud)
所以,这里有两个键:
识别何时{表示功能块的开始与对象定义的开始。您的第一个代码块启动一个函数体,第二个启动一个对象定义。
了解功能块中允许的语法与对象定义中允许的语法之间的区别。
| 归档时间: |
|
| 查看次数: |
11696 次 |
| 最近记录: |