有人可以解释这个错误:expression式语句不分配或调用

我有这两个代码块。

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. 有人能解释为什么发生这种情况 提前致谢。

你的第一块代码是定义一个function块。 你的第二块代码是定义一个对象定义。 每种语法都有不同的语法,您必须使用适当的语法来匹配上下文。

你的第一块代码只是在一个function块中执行一系列的语句。 {在这行的结尾:

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

定义function块的开始 。 因此,Javascript正在寻找在这种情况下合法的声明。 每行代码都需要有一个合法的Javascript语句。 和,

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

在这方面不是一个法律声明。 如果您试图为message.username赋值,那么有效的语法是:

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

在第二个块中,您处于对象定义的中间。 {在这行的结尾:

 io.emit('chatMessage', { 

启动一个对象定义 。 因此,在该对象上定义属性的合法语法如下所示:

 username: socket.request.user.username, 

所以,这里有两个键:

  1. 识别何时{表示function块的开始与对象定义的开始。 你的第一个代码块启动一个函数体,第二个启动一个对象定义。

  2. 了解function块中允许的语法与对象定义中允许的语法之间的区别。

还行吧:

 message.type = 'message'; 

还行吧:

 message.created = Date.now(); 

这不是:

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

它应该是:

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

你的问题不清楚 – 当你改变: =或改变之前,你会得到警告吗? 你没有说出哪一行会导致错误,我认为这是一个:而不是=

你确定你没有使用TypeScript来解释冒号吗?